0

我一直在撞墙并不断收到一个模糊的错误“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);
}
4

2 回答 2

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 无法按名称识别参数占位符。

于 2013-04-04T20:28:15.520 回答
0

不确定@Q1-Easy 是字段名称还是值,但您需要将字段设置为:

UPDATE table SET field = value WHERE field = value;

您的第一个“field = value”部分错误。

于 2013-04-04T20:28:07.333 回答