【问题标题】:Update in C# using Access database使用 Access 数据库在 C# 中更新
【发布时间】: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

标签: c# .net visual-studio ms-access


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-16
  • 2011-09-03
  • 1970-01-01
相关资源
最近更新 更多