您对 UPDATE 语句使用 INSERT 语法。您的 UPDATE 语句应具有以下形式:
UPDATE tableName
SET col1 = val1,
col2 = val2,
col3 = val3
WHERE someColumn = someValue
此外,您对使用非参数化查询的 SQL 注入攻击持开放态度。最后,我会使用一个Using
块来确保您的连接和命令被正确关闭和处理。
将它们放在一起看起来像这样:
Using Dim cn As SqlConnection = New SqlConnection("Data Source=NIMO-HP\SQLEXPRESS;Initial Catalog=FYP_db;Integrated Security=True")
cn.Open()
Dim sqlQuery As String = "UPDATE TblCustomerDetails " + _
"SET compName = @compName, " + _
"compContact = @compContact, " + _
"compAddress = @compAddress, " + _
"compFax = @compFax, " + _
"compEmail = @compEmail, " + _
"compPayterm = @compPayterm, " + _
"compTaxscheme = @compTaxscheme, " + _
"compPaymode = @compPaymode, " + _
"compRemarks = @compRemarks " + _
"WHERE compID = @compID"
Using Dim cmd As SqlCommand = New SqlCommand(sqlQuery, cn)
cmd.Parameters.AddWithValue("@compFax", txtCname.Text)
cmd.Parameters.AddWithValue("@compContact", txtCpno.Text)
cmd.Parameters.AddWithValue("@compAddress", txtCaddrs.Text)
cmd.Parameters.AddWithValue("@compFax", txtCfax.Text)
cmd.Parameters.AddWithValue("@compEmail", txtCemail.Text)
cmd.Parameters.AddWithValue("@compPayterm", cmbPTerm.Text)
cmd.Parameters.AddWithValue("@compTaxscheme", cmbTaxschm.Text)
cmd.Parameters.AddWithValue("@compPaymode", cmbPmode.Text)
cmd.Parameters.AddWithValue("@compRemarks", txtRemarks.Text)
cmd.Parameters.AddWithValue("@compID", lblCID.Text)
Dim result As Integer
result = cmd.ExecuteNonQuery()
If result = 1 Then
MsgBox("Account updated!!", MsgBoxStyle.Information, _
"Updation complete")
Else
MsgBox("Account not updated!!", MsgBoxStyle.Information, _
"Updation not complete")
End If
End Using
End Using
上面的代码示例中还有一些需要注意的地方:
首先,我从要更新的值列表中删除了 compID。您在 WHERE 查询中使用它,所以我认为如果您尝试更新作为 WHERE 子句一部分使用的同一列,您的查询会得到有趣的结果。此外,该值的来源是一个标签,它告诉我它不应该被更改。
其次,ExecuteNonQuery()
返回一个 int ,其中包含受影响的行数。在这种情况下,它应该是 1 - 如果它不是 1,我让你显示一个不同的消息框。
第三,cmbPTerm
和cmbTaxxshm
听起来cmbPmode
像ComboBox
我,你不会得到我认为你期望使用他们的Text
财产的东西。我想你会想要SelectedText
- 很难说不知道你的 ComboBoxes 是如何绑定的。我会把它作为练习留给你:)
第四,为了便于阅读,我将 UPDATE 查询分成几行——只要查询正确,您不必那样做。
最后,我建议使用MessagBox.Show()
vs MsgBox
。