为什么UPDATE语句总是产生“数据类型不匹配”错误?

时间:2014-10-07 19:26:11

标签: sql vb.net

下面的语句导致“数据类型不匹配”错误,我不知道为什么。你能帮我解决一下吗?

cmd.CommandText = "UPDATE C_DETAILS" & " SET C_ID='" & Me.C_ID.Text & "',C_NAME='" & Me.C_NAME.Text & "', C_FATHER='" & Me.C_FATHER.Text & "',C_PHONE= '" & Me.C_PHONE.Text & "',C_GENDER='" & Me.C_GENDER.Text & "',C_DOB='" & Me.C_DOB.Text & "',C_ADDRESS='" & Me.C_ADDRESS.Text & "'" & "WHERE C_ID=" & Me.C_ID.Text & ""
cmd.ExecuteNonQuery()

2 个答案:

答案 0 :(得分:1)

表格中的C_ID数据类型是什么?

在这里,您将其作为字符串引用(通过将值包装在单引号中):

... SET C_ID='" & Me.C_ID.Text & "' ...

在这里,您将其引用为数字(无单引号):

... WHERE C_ID=" & Me.C_ID.Text & ""

它不能同时存在。所以这两个中的一个是不正确的。


此外,这很重要,您在问题中显示的代码代表SQL injection vulnerability,这是当今软件中最常见和最危险的安全漏洞之一。请改用parameterized queries。像这样的直接字符串连接应该永远在生产代码中使用。

答案 1 :(得分:0)

因为在where中,您没有使用单引号,暗示它是int字段,并且它显示更新错误。因此,假设它是int字段,您可以使用以下行作为代码的替换。

cmd.CommandText = "UPDATE C_DETAILS" & " SET C_ID=" & Me.C_ID.Text & ",C_NAME='" & Me.C_NAME.Text & "', C_FATHER='" & Me.C_FATHER.Text & "',C_PHONE= '" & Me.C_PHONE.Text & "',C_GENDER='" & Me.C_GENDER.Text & "',C_DOB='" & Me.C_DOB.Text & "',C_ADDRESS='" & Me.C_ADDRESS.Text & "'" & "WHERE C_ID=" & Me.C_ID.Text & ""

而且,这可能是真的,C_ID可能是字符串/ varchar字段,那么您需要使用以下内容。

cmd.CommandText = "UPDATE C_DETAILS" & " SET C_ID='" & Me.C_ID.Text & "',C_NAME='" & Me.C_NAME.Text & "', C_FATHER='" & Me.C_FATHER.Text & "',C_PHONE= '" & Me.C_PHONE.Text & "',C_GENDER='" & Me.C_GENDER.Text & "',C_DOB='" & Me.C_DOB.Text & "',C_ADDRESS='" & Me.C_ADDRESS.Text & "'" & "WHERE C_ID='" & Me.C_ID.Text & "'"