2016-11-30 58 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