【问题标题】:Why is my .NET SQL command with parameters not updating all the fields?为什么我的带有参数的 .NET SQL 命令没有更新所有字段?
【发布时间】:2014-02-02 03:00:33
【问题描述】:

我的sql语句有问题吗?因为只有 Client_Name 被更新,其余保持不变。

我已经检查过所有文本框和组合框是否不为空并且与原始数据不同

sql = "UPDATE Client_Info SET Client_Name= @a, Gender= @b, Age= @c, Birthdate= @d, Address= @e, Email_Address= @f, Contact_Number= @h WHERE Client_Name='" & TextBox8.Text & "'"
        sqlCom.Parameters.Add("@a", OleDb.OleDbType.VarChar).Value = TextBox18.Text
        sqlCom.Parameters.Add("@b", OleDb.OleDbType.VarChar).Value = ComboBox8.Text
        sqlCom.Parameters.Add("@c", OleDb.OleDbType.BigInt).Value = TextBox17.Text
        sqlCom.Parameters.Add("@d", OleDb.OleDbType.Date).Value = ComboBox7.Text & " " & ComboBox6.Text & ", " & ComboBox5.Text
        sqlCom.Parameters.Add("@e", OleDb.OleDbType.VarChar).Value = TextBox16.Text
        sqlCom.Parameters.Add("@f", OleDb.OleDbType.VarChar).Value = TextBox15.Text
        sqlCom.Parameters.Add("@h", OleDb.OleDbType.VarChar).Value = TextBox14.Text

        sqlCom.ExecuteNonQuery()

【问题讨论】:

  • 为什么对所有这些值都使用参数,但通过添加字符串来传递客户端名称?
  • 你有一个 SQL 注入漏洞。
  • 尝试直接执行相同的 SQL,将所有参数替换为相应的值。你会看到问题。并阅读并理解 Slaks 这样做的原因。
  • 您的问题是,对于非字符串数据类型,您需要将文本转换为预期的类型,并在 WHERE 中添加一个参数
  • 如果数据类型错误,就会出现错误并且不会更新任何内容。也许他正在更新/查看不同的数据库。

标签: sql .net vb.net visual-studio


【解决方案1】:

这样试试

sqlCom.Parameters.Add("@c", OleDb.OleDbType.BigInt).Value = Convert.Int64(TextBox17.Text)

sqlCom.Parameters.Add("@d", OleDb.OleDbType.Date).Value = Convert.DateTime(ComboBox7.Text & "/" & ComboBox6.Text & "/" & ComboBox5.Text)

【讨论】:

  • 对于BigInt,您最好使用Convert.ToInt64进行转换
猜你喜欢
  • 1970-01-01
  • 2015-08-08
  • 2016-09-01
  • 2022-09-23
  • 1970-01-01
  • 2017-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多