如何使用c#更新access中的true/false字段


我的代码是:
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.OleDb"的未处理异常。在System.Data.dll中发生OleDbException

附加信息:UPDATE语句语法错误。

我的问题是我想更新grant的值(true/false字段)在我的访问数据库基于它的前一个值。

我猜你必须去掉引号,因为那些将使它成为一个文本变量。另外,由于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);

最新更新