为什么带参数的.NET SQL命令没有更新所有字段?

为什么带参数的.NET SQL命令没有更新所有字段?,sql,.net,vb.net,visual-studio,Sql,.net,Vb.net,Visual Studio,我的sql语句有问题吗?因为只有客户端名称被更新,其余的保持不变 我已经检查了所有的文本框和组合框是否都不是空的,是否与原始数据不同 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 & "'

我的sql语句有问题吗?因为只有客户端名称被更新,其余的保持不变

我已经检查了所有的文本框和组合框是否都不是空的,是否与原始数据不同

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()
像这样试试

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)

为什么要对所有这些值使用参数,但通过添加字符串来传递客户端名称?您存在SQL注入漏洞。请尝试直接执行相同的SQL,方法是将所有参数替换为相应的值。你会发现问题所在。阅读并理解Slaks为什么会这样做。您的问题是,对于非字符串数据类型,您需要将文本转换为预期类型,并添加一个参数,如果数据类型错误,则会出现错误,并且不会更新任何内容。可能他正在更新/查看不同的数据库。对于
BigInt
您最好使用
convert.ToInt64进行转换