如何使用c#更新访问中的真/假字段?

时间:2014-08-15 10:12:36

标签: c# database ms-access ms-access-2013

我的代码是:

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字段)值。

1 个答案:

答案 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);