这是我的代码
OleDbCommand cmd = new OleDbCommand("UPDATE Patient SET FirstName ='" + tbPatientFirstName.Text + "' WHERE PatientID='" + tbPatientID+ "' ",conn);
我在tbPatientFirstName中更改的文本是从字符串到字符串。 PatientID是记录主键。 我知道我没有使用参数化sql,但它不是必需的,我现在没有时间学习它
答案 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);
这一切都是必需的。现在,如果这些值包含单引号,您也不会在向数据库引擎传递值时遇到麻烦。