更新Access Database c#中的一个布尔字段

本文关键字:一个 布尔 字段 Database Access 更新 | 更新日期: 2023-09-27 18:07:31

我一直在打我的头撞墙,并不断得到一个模糊的错误"语法错误在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);
}

更新Access Database c#中的一个布尔字段

要更新的字段名在哪里?update命令所需的语法是

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不能通过名称识别参数占位符

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

UPDATE table SET field = value WHERE field = value;

你把第一个"field = value"部分写错了