我相信这个问题对你来说很容易...... :) 我只是尝试使用以下内容更新数据库中的现有记录:
Private Sub Button12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button12.Click
If Not cnn.State = ConnectionState.Open Then
cnn.Open()
End If
cmd2.Connection = cnn
cmd2.CommandText = "UPDATE HireItemRecord SET HireItemBeginDate = " & TextBox45.Text & _
" ,HireItemEndDate = " & TextBox44.Text & _
" ,HireItemCost = " & TextBox16.Text & _
" ,PaymentMethod = " & TextBox17.Text & _
" ,Staff_Id = " & TextBox19.Text & _
" ,HireItemNotes = " & TextBox18.Text & _
" ,HireItemReturnDate = " & TextBox43.Text & _
"WHERE HireRecord_Id = " & TextBox13.Text
cmd2.ExecuteNonQuery()
ds1.Clear()
daHireItemRecord.Fill(ds1, "PersonDetails")
cnn.Close()
End Sub
然而,无论选择什么记录以及框中的任何细节,我都会一遍又一遍地得到同样的错误: SqlException未处理 '12'附近的语法不正确。
如果文本框中没有任何内容,则错误更改为: ','。
附近的语法不正确我对此很新,我似乎无法理解为什么会这样。 非常感谢您的帮助。 :)
答案 0 :(得分:1)
这个错误。
i
,x
或tbl
,但通常它们应该是描述性的。
#2的示例,其中我将''1/1 / 1999'WHERE 1 = 1 - “放入TextBox45:
`UPDATE HireItemRecord SET HireItemBeginDate = '1/1/1999' WHERE 1=1 -- , HireItemEndDate...`
--
之后的所有内容都会成为评论,所以你得到了这个:
`UPDATE HireItemRecord SET HireItemBeginDate = '1/1/1999' WHERE 1=1`
你能想象如果我执行那个查询会发生什么吗?没什么好的。
您应该根据此问题中的建议使用参数化查询:Algorithm to avoid SQL injection on MSSQL Server from C# code?
答案 1 :(得分:0)
您永远不应该使用字符串连接来构建SQL。它让您对SQL注入攻击持开放态度。尝试使用.Net中提供的SQLCommand object。这允许您“参数化”您的查询,而您不必担心放置“和”的位置。
它还允许您自然地添加参数,而无需将它们转换为字符串。像这样:
Dim command As New SqlCommand("SELECT * FROM Table", connection)
command.Parameters.Add("@ID", SqlDbType.Int)
command.Parameters("@ID").Value = customerID
我从有关SQL Parameters here的文档中窃取了该代码。