我一直在靠墙打我的头,并且一直发出一个模糊的错误“UPDATE语句中的语法错误”。谁能告诉我我的更新声明有什么问题?
try
{
OleDbConnection ECon = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\zoofari\zoofari\zoofari\bin\Debug\MainData.accdb");
OleDbDataAdapter EdAdapt = new OleDbDataAdapter();
EdAdapt.UpdateCommand = new OleDbCommand("UPDATE tbl_Results SET @Q1-Easy WHERE Username = '" +txtUname.Text+ "'", ECon);
EdAdapt.UpdateCommand.Parameters.Add("@Q1-Easy", OleDbType.Boolean).Value = true;
ECon.Open();
EdAdapt.UpdateCommand.ExecuteNonQuery();
ECon.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
答案 0 :(得分:2)
要更新的字段名称在哪里? 更新命令所需的语法是
UPDATE <tablename> SET <Field> = <value> WHERE <keyfield> = <value>
您的查询没有要更新的字段
EdAdapt.UpdateCommand = new OleDbCommand("UPDATE tbl_Results" +
" SET FIELDNAME= @Q1-Easy WHERE Username = '" +txtUname.Text+ "'", ECon);
^^^^^^^^^^
另请注意,永远不要使用字符串连接来构建sql命令 始终使用参数化查询。 (您在此查询中已有参数,为什么不使用另一个参数?)
在下面看到您对该字段名称的评论,那么您的代码可以通过这种方式进行更改
string sqlText = "UPDATE tbl_Results SET [Q1-Easy] = ? WHERE Username = ?";
using(OleDbConnection ECon = new OleDbConnection(.....))
using(OleDbCommand cmd = new OleDbCommand(sqlText, ECon))
{
ECon.Open();
cmd.Parameters.Add("@Q1Value", OleDbType.Boolean).Value = true;
cmd.Parameters.Add("@uname", OleDbType.VarChar).Value = txtUname.Text;
cmd.ExecuteNonQuery();
}
我添加了using语句以确保连接已关闭并在完成后处理,并且我在方括号中附加了字段名称,因为我不确定-
是否被接受为有效字符字段名称。
另请注意,在OleDb中,参数占位符可能很简单吗?但是根据占位符在文本中出现的顺序将它们添加到集合中非常重要。 OleDb无法按名称识别参数占位符。
答案 1 :(得分:0)
不确定@ Q1-Easy是字段名称还是值,但您需要将字段设置为:
UPDATE table SET field = value WHERE field = value;
你的第一个“field = value”部分错了。