【发布时间】: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