为什么我的sql命令给了我错误的数据类型错误

时间:2016-03-18 13:42:22

标签: c# sql ms-access

这是我的代码

 OleDbCommand cmd = new OleDbCommand("UPDATE Patient SET FirstName ='" + tbPatientFirstName.Text + "' WHERE PatientID='" + tbPatientID+ "' ",conn);

我在tbPatientFirstName中更改的文本是从字符串到字符串。 PatientID是记录主键。 我知道我没有使用参数化sql,但它不是必需的,我现在没有时间学习它

2 个答案:

答案 0 :(得分:2)

除了建议使用paramterized query(你认为不需要,所以希望没关系),三件事似乎是错误的潜在原因。

首先,您似乎使用TextBox对象而不是Text。将tbPatientID更改为tbPatientID.Text

其次,如果您的PatientID是整数,则可能需要删除'

的撇号tbPatientID
WHERE PatientID=" + tbPatientID.Text.Trim()+ " " //no apostrophe

第三,为避免whitespace未被发现,请考虑使用Trim()

OleDbCommand cmd = new OleDbCommand("UPDATE Patient SET FirstName ='" + tbPatientFirstName.Text.Trim() + "' WHERE PatientID=" + tbPatientID.Text.Trim()+ " ",conn);

答案 1 :(得分:1)

使用参数化查询所需的时间远远少于修复这些错误所需的时间

OleDbCommand cmd = new OleDbCommand(@"UPDATE Patient 
       SET FirstName =@name WHERE PatientID= @id", conn);

cmd.Parameters.Add("@name", OleDbType.VarWChar).Value = tbPatientFirstName.Text 
cmd.Parameters.Add("@id", OleDbType.Integer).Value = Convert.ToInt32(tbPatientID.Text);

这一切都是必需的。现在,如果这些值包含单引号,您也不会在向数据库引擎传递值时遇到麻烦。