我正在尝试更新MS Access表并且它不断抛出错误:
未处理的类型' System.Data.OleDb.OleDbException'发生在System.Data.dll
中其他信息:查询表达式中字符串中的语法错误' EmID =' 234'。
onDateSet
在数据库中。请帮忙
public void onDateSet(DatePicker view, int year, int month, int day) {
if(getActivity.isDateEdit1){
DateEdit1.setText(""+day + "/" + (month + 1) + "/" + year);
return;
}
DateEdit2.setText("" + day + "/" + (month + 1) + "/" + year);
}
答案 0 :(得分:3)
您忘记在WHERE值之后添加结束引号。但修复问题添加缺少的引用仅用于隐藏其他问题。
如果您的某个文本框包含单引号,该怎么办?您将再次获得由字符串连接引起的语法错误异常,其中引号用作值的分隔符。使用您的用户输入的单引号,您将再次混淆Sql Parser。
要解决此问题(以及一个更严重的问题,称为Sql Injection),您需要开始使用参数
string cmdText = @"UPDATE Sales SET Printer = @printer,
Ink = @Ink, Paper = @Paper
WHERE EmID = @id";
using(OleDbConnection con = new OleDbConnection(...))
using(OleDbCommand cmd = new OleDbCommand(cmdText, con))
{
con.Open();
cmd.Parameters.Add("@printer", OleDbType.VarWChar).Value = txtPrinter.Text;
cmd.Parameters.Add("@ink", OleDbType.VarWChar).Value = txtInk.Text;
cmd.Parameters.Add("@paper", OleDbType.VarWChar).Value = txtPaper.Text;
cmd.Parameters.Add("@id", OleDbType.VarWChar).Value = txtEmpID.Text;
cmd.ExecuteNonQuery();
}