【发布时间】: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