SQL 更新命令始终返回 0
本文关键字:返回 更新 命令 SQL | 更新日期: 2023-09-27 18:35:26
我想知道为什么这段代码不起作用;它总是返回零(任何受影响的行)。该数据库是 Access 数据库。我可以插入和删除数据,但不能更新数据。它是一个Windows Forms C#应用程序。
string sql = "";
try
{
string[] parametrosNomes = new string[3];
parametrosNomes[0] = "@CatId";
parametrosNomes[1] = "@CatNome";
parametrosNomes[2] = "@CatDescricao";
object[] parametrosValores = new object[3];
parametrosValores[0] = oCateg.categoriaid;
parametrosValores[1] = oCateg.categoriaNome;
parametrosValores[2] = oCateg.categoriaDescricao;
sql = "UPDATE Categorias SET categoriaNome = @CatNome, categoriaDescricao=@CatDescricao Where categoriaId=@CatId";
int retorno = AcessoDB.CRUD(sql, parametrosNomes, parametrosValores);
return retorno;
}
catch (Exception ex)
{
throw ex;
}
注意:在 CRUD 方法中,我只填充参数并执行 sqlcommand
int retorno = command.ExecuteNonQuery();
return retorno;
我验证了所有参数、字段名称和命令执行没有错误,但始终返回零并且不更新数据库中的表。
我看不出我的代码没有任何错误,但它不起作用。
谁能睁开我的眼睛?
我要感谢大家的回答。
问题解决了:参数没有按照它们的使用顺序传递。
我只是更正了参数顺序:
string[] parametrosNomes = new string[3];
parametrosNomes[0] = "@CatNome";
parametrosNomes[1] = "@CatDescricao";
parametrosNomes[2] = "@CatId";
object[] parametrosValores = new object[3];
parametrosValores[0] = oCateg.categoriaNome;
parametrosValores[1] = oCateg.categoriaDescricao;
parametrosValores[2] = oCateg.categoriaid;
sql = "UPDATE Categorias SET categoriaNome = @CatNome, categoriaDescricao=@CatDescricao Where categoriaId=@CatId";
现在,表正在正确更新。
试试这个。参数的顺序应与 sql 中的顺序相同。在 sql 本身中,你需要使用"?"。
string sql = "";
try
{
string[] parametrosNomes = new string[3];
parametrosNomes[0] = "@CatNome";
parametrosNomes[1] = "@CatDescricao";
parametrosNomes[2] = "@CatCatId";
object[] parametrosValores = new object[3];
parametrosValores[0] = oCateg.categoriaNome;
parametrosValores[1] = oCateg.categoriaDescricao;
parametrosValores[2] = oCateg.categoriaid;
sql = "UPDATE Categorias SET categoriaNome = ?, categoriaDescricao = ? Where categoriaId = ?";
int retorno = AcessoDB.CRUD(sql, parametrosNomes, parametrosValores);
return retorno;
}
catch (Exception ex)
{
throw ex;
}
我一直
认为使用将查询中的值与名称(例如,id = @id)匹配的字典意味着在将参数添加到 OleDbCommand.Parameters 列表时顺序无关紧要。 事实上,我从来没有遇到过.NET和Oracle或SQL Server数据库的问题。 但是,对于msaccess(或者可能是OleDb),当我将id参数(请参阅下面的单行)作为OleDbCommand.Parameters列表中的第一个条目时,我发现ExecuteNonQuery始终返回0。 将行移动到参数列表的末尾(在 WHERE 子句中使用了 id)后,ExecuteNonQuery 返回了 1(预期结果)。
cmd.Parameters.AddWithValue("@id", pi.Id);