使用 Access 数据库在 C# 中更新

Posted

技术标签:

【中文标题】使用 Access 数据库在 C# 中更新【英文标题】:Update in C# using Access database 【发布时间】:2018-06-03 22:21:12 【问题描述】:

我一直在尝试在 DataGridView 中进行更新,但它一直返回这个

没有为一个或多个必需参数指定值

这是我的代码

private void btnAlterar_Click(object sender, EventArgs e)
    
    try
    
        string strincon = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\flavi\Desktop\Pet&Shop.2\PetShop\TelaAbertura\bin\Debug\DatabasePS.mdb;Persist Security Info=True";

        OleDbConnection con = new OleDbConnection(strincon);
        con.Open();

        String comando = "UPDATE Funcionario SET Nome= '" + txtNome.Text + "' , Login= '" + txtLogin.Text + "' , Senha= '" + txtSenha.Text + "', Email= '" + txtEmail.Text + "' , Cargo= '" + txtCargo.Text + "' WHERE Codigo =" + codigo;

        OleDbCommand cmd = new OleDbCommand(comando, con);

        cmd.ExecuteNonQuery();

        MessageBox.Show("Dados Alterados Com Sucesso!");

        txtCargo.Clear();
        txtEmail.Clear();
        txtLogin.Clear();
        txtNome.Clear();
        txtSenha.Clear();

        con.Close();
    
    catch (Exception erro)
    
         MessageBox.Show(erro.Message);
    

【问题讨论】:

您尝试执行的产生此错误的实际 SQL 代码是什么? (comando的运行时值) 我可以执行 Select*From Funcionario 来查询数据,现在我希望能够更新它们 确实如此。而且您在尝试这样做时似乎遇到了错误。我想这就是你要问的,是吗?您描述的错误表明数据库引擎需要您正在执行的 SQL 代码中的参数,但未提供任何参数。那么...您正在执行的 SQL 代码是什么?您展示的 C# 代码基于运行时输入动态构建 SQL 代码(顺便说一下,这是非常不安全且极易出错的......您应该看看参数化查询)。所以目前我们不知道你的 SQL 代码是什么。你能告诉我们吗? 仔细检查数据库中的列名,当 Access 看到不匹配的内容时,它认为您包含了一个参数而没有给它一个值。顺便说一句,您可能可以通过使用参数化语句来消除很多这种情况。 SQL Injection alert - 您应该将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入 - 查看 Little Bobby Tables 【参考方案1】:

您需要在字段名称上添加括号,因为可能某些字段名称是 Access 上的关键字。按如下方式更改您的查询:

String comando = "UPDATE [Funcionario] SET [Nome]= '" + txtNome.Text + "' , [Login]= '" + txtLogin.Text + "' , [Senha]= '" + txtSenha.Text + "', [Email]= '" + txtEmail.Text + "' , [Cargo]= '" + txtCargo.Text + "' WHERE [Codigo] =" + codigo;

【讨论】:

尝试使用parameters而不是字符串连接,这肯定可以解决您的问题。但是您的问题可能与quotation mark 有关。检查 textBoxes 的值中是否没有 quotation mark

以上是关于使用 Access 数据库在 C# 中更新的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 在 Access 中创建、更新、删除数据?

使用 c# 和 oledb 查询更新 Ms-Access 2010 中的列值

C# DataTable 更新 Access 数据库

使用 C# 使用 CSV 文件填充 DataGridView,并使用结果更新 Access 数据库

我无法使用 C# 语句更新 Access 2007 表

如何在 C# 中更新或刷新与 Ms-access 连接的数据网格视图