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;

我验证了所有参数、字段名称和命令执行没有错误,但始终返回零并且不更新数据库中的表。

我看不出我的代码没有任何错误,但它不起作用。

谁能睁开我的眼睛?

SQL 更新命令始终返回 0

我要感谢大家的回答。

问题解决了:参数没有按照它们的使用顺序传递。

我只是更正了参数顺序:

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);