如何使用 c# 更新访问中的真/假字段?
Posted
技术标签:
【中文标题】如何使用 c# 更新访问中的真/假字段?【英文标题】:How to update true/false field in access using c#? 【发布时间】:2014-08-15 10:12:35 【问题描述】:我的代码是:
private void setGrant()
cmd.Connection = con;
con.Open();
cmd.CommandText = "SELECT grant FROM UsrDet WHERE usrname = '" + this.usrname.Text + "' AND usrpasswd = '" + this.passwd.Text +"';";
using (OleDbDataReader dr = cmd.ExecuteReader())
while(dr.Read())
bool permsn = Convert.ToBoolean(dr["grant"]);
if (permsn == false)
permsn = true;
OleDbCommand c1 = new OleDbCommand("UPDATE UsrDet SET grant = '" + permsn.ToString() + "' WHERE usrname = '" + this.usrname.Text + "';", con);
c1.ExecuteNonQuery();
else
MessageBox.Show("Access Denied.");
执行时显示异常:
System.Data.dll 中出现“System.Data.OleDb.OleDbException”类型的未处理异常
附加信息:UPDATE 语句中的语法错误。
我的问题是我想根据之前的值更新我的访问数据库中的 grant(true/false field) 的值。
【问题讨论】:
您的UPDATE
语句对我来说看起来不错(除非 grant
是 Access 中的保留字),bool.ToString
将返回 Access 期望的 TrueString / FalseString。您能否发布有关该错误的更多信息?但是,您几乎可以肯定使用 SQL 参数...
【参考方案1】:
我猜你必须去掉引号,因为它们会使它成为一个文本变量。此外,由于grant
是保留关键字,请在其周围使用括号:
OleDbCommand c1 = new OleDbCommand("UPDATE UsrDet SET [grant] = " + permsn + " WHERE usrname = '" + this.usrname.Text + "';", con);
我建议你使用参数。
OleDbCommand c1 = new OleDbCommand("UPDATE UsrDet SET [grant] = ? WHERE usrname = ?;", con);
c1.Parameters.Add("?", permsn);
c1.Parameters.Add("?", this.usrname.Text);
【讨论】:
即使未处理的异常仍然存在 即使grant
周围有括号?以上是关于如何使用 c# 更新访问中的真/假字段?的主要内容,如果未能解决你的问题,请参考以下文章