如何使用 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# 更新访问中的真/假字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用过滤器从 C# 中的访问中选择特定字段

如何使用 C# 程序中的新值快速更新表中的所有行

如何使用数据读取器 C# 发现一个空的访问字段

如何使用当前日期更新访问日期/时间字段

如何在 Windows 窗体 C# 中单击按钮通过 DataGridView 更新数据库中的布尔字段

输入中的真/假(vuejs),可能没有 v-model