繁体   English   中英

尝试更新记录,不断收到此错误vb.net

[英]Trying to update record, keep getting this error vb.net

我确定这个问题对您来说很容易... :)我只是在尝试使用以下方法更新数据库中的现有记录:

    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'附近。

当文本框中绝对没有任何内容时,错误将更改为:','附近的语法不正确。

我对此很陌生,我似乎无法理解为什么会这样。 非常感谢您的帮助。 :)

这太不对了。

  1. 每个逗号后都需要一个空格,而不是前一个空格。
  2. 在查询中使用它们之前,应先转义它们的值。 如果我在您的任何文本框中输入“ 0 WHERE 1 = 1-”,它将破坏整个表格。
  3. 您应该始终正确命名表单控件。 如果我在一年后让您返回此代码,并告诉您TextBox44出现问题,您知道这意味着什么吗? 您的变量也一样。 有时,可以将ixtbl用作变量名,但通常它们应具有描述性。


#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`

您能想象如果执行该查询会发生什么? 没什么好的。

您应该按照此问题中的建议使用参数化查询: 避免从C#代码在MSSQL Server上注入SQL的算法?

您永远不应使用字符串连接来构建SQL。 它使您容易受到SQL注入攻击的影响。 尝试使用.Net中提供的SQLCommand对象 这使您可以“参数化”查询,而不必担心在何处放置“和”。

它还将允许您自然地添加参数,而不必将其转换为字符串。 像这样:

Dim command As New SqlCommand("SELECT * FROM Table", connection)
command.Parameters.Add("@ID", SqlDbType.Int)
command.Parameters("@ID").Value = customerID

在这里从有关SQL参数的文档中窃取了该代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM