使用 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# 和 oledb 查询更新 Ms-Access 2010 中的列值