c# - 无法通过 OleDbAdapter 更新 Access 数据库

标签 c# database ms-access oledb

所以我有一个输入表单,我在其中为每一列输入值。然后在声明连接、适配器、命令和查询后执行以下代码,没有抛出异常,也没有更新数据库:

    private void BtnOk_Click(object sender, EventArgs e)
    {
        OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=[MyDirectory]\Database.accdb");    
        conn.Open();
        string query = "UPDATE [Users] SET [User]=" + txtUser.Text 
        + ", [Password]=" + txtPass.Text 
        + ", [IsAdmin]=" + chBAdmin.Checked.ToString() 
        + " WHERE ID=" + txtID.Text + "";
        OleDbDataAdapter adapter = new OleDbDataAdapter(query, conn);
        OleDbCommand comm = new OleDbCommand
        {
            CommandType = CommandType.Text,
            CommandText = query,
            Connection = conn
        };

        try
        {
            comm.ExecuteNonQuery();
            MessageBox.Show(query);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
        conn.Close();
    }

最佳答案

您需要用单引号分隔值,例如

string query = "UPDATE [Users] SET [User]='" + txtUser.Text + "'"

但是,您可能会收到有关 SQL 注入(inject)的评论,并且应该真正使用参数化查询,而不是构建包含用户输入的 SQL 字符串。

关于c# - 无法通过 OleDbAdapter 更新 Access 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51608751/

相关文章:

c# - 使用 WebClient 以适当的扩展名保存图像

php - 如何用php管理cookies

sql - 如何输出多个实体?(oracle sql)

mysql - 查询表达式中的语法错误(缺少运算符) sri.invoiceNo = sri.invoiceNo INNER JOIN Staff s oN s.Staffid = sr.userld

c# - 如何使用 C# 访问维基百科的数据库?

c# - 无法在 Unity3D 中移动实例化的预置

c# - 如何从 3 个 double 列表中获取 float 组?

sql - 如何将写入与读取分开以最大程度地减少大量读取查询的影响?

sql - 如何进行可编辑的UNION查询?

c# - Microsoft Access 中的 bool 列和使用 linq 过滤数据