2016-11-30 85 views
0

我想向我的表中添加一条记录,但是我在尝试这样做时收到异常。我能够成功打开连接,(我的第一个消息框出现),但之后我得到了异常。这里是我的代码:这个SQL插入语句有什么问题?

Private Sub btnUpdateInfo_Click(sender As Object, e As EventArgs) Handles btnUpdateInfo.Click 
    Dim con As New SqlConnection 
    Dim cmd As New SqlCommand 
    con = New SqlConnection("Data Source=localhost\SQLEXPRESS;Initial Catalog=CISDB;Integrated Security=SSPI;") 
    Try 
     cmd.CommandText = "INSERT INTO customers (FirstName,LastName) VALUES (txtFirstName.Text, txtLastName.Text)" 
     cmd.Connection = con 
     con.Open() 
     MsgBox("Connection Open ! ") 
     cmd.ExecuteNonQuery() 
     MsgBox("Record inserted") 
     con.Close() 
    Catch ex As Exception 
     MsgBox("Error!") 
    End Try 
End Sub 
+1

使用参数的值传递到语句。 –

+3

它怀疑你想插入文字“txtFirstName.Text”的名字。使用SQL参数。删除Try/Catch - 它隐藏了您的重要信息 – Plutonix

+0

幸运的是,这失败了。它失败了,因为你试图插入字符串文字而不是值。但是,您需要在这里使用参数,而不是像这样添加文本框值,因为它容易受到sql注入的影响。正如已经提到的那样,捕捉是一个可怕的设计。它几乎比空的渔获还要好。您知道发生了错误,但由于您没有记录或提供任何有用的信息,因此无法知道发生了什么。 –

回答

0

你需要看看异常消息(ex.Message)看是什么问题...如果你有类似的错误为multipart标识那就试试这个查询字符串,而不是您当前的查询字符串进行快速测试。

cmd.CommandText = "INSERT INTO customers (FirstName,LastName) VALUES ('" & txtFirstName.Text & "', '" & txtLastName.Text & "')" 

退房如前所述

1

对于未来的读者参数化查询 - SQL参数将节省大量的你和你的同事的时间。

Private Sub btnUpdateInfo_Click(sender As Object, e As EventArgs) Handles btnUpdateInfo.Click 
    Dim connString = "Data Source=localhost\SQLEXPRESS;Initial Catalog=CISDB;Integrated Security=SSPI;" 
    Using connection As New SqlConnection(connString) 
     Using command As New SqlCommand(connection) 
      command.CommandText = "INSERT INTO customers (FirstName,LastName) VALUES (@FirstName, @Lastname)" 
      Dim params As SqlParameter() = 
      { 
       New SqlParameter With { .ParameterName = "@FirstName", .SqlDbType.VarChar, .Value = txtFirstName.Text }, 
       New SqlParameter With { .ParameterName = "@LastName", .SqlDbType.VarChar, .Value = txtLastName.Text }, 
      } 
      command.Parameters.AddRange(params) 
      connection.Open() 
      command.ExecuteNonQuery() 
      ' Inserted 
     End Using 
    End Using 
End Sub 

同为try.. catch(如@Plutonix在评论中注意到) - 如果你会得到“真正的”例外,你会发现原因及解决办法更快

+0

OP这里 - 谢谢你!我摆脱了try/catch,然后我能够看到实际的错误信息并诊断我的问题。我现在将开始了解许多人提出的参数 - 这是一个很好的例子。现在它已经全部正常工作了,将try/catch放回去是否是一种好的做法? –

+0

@SamLev - 为什么你想把'try ... catch'块? – Fabio