我的代码是:
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字段)值。
答案 0 :(得分: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);