【问题标题】:ExecuteNonQuery doesn't return value?ExecuteNonQuery 不返回值?
【发布时间】:2011-04-09 09:17:02
【问题描述】:

我正在尝试编写一个通用的保存函数,我正在使用Dbcommand。我的代码是:

private static int Save(CommandType commandtype, string commandText, SqlParameter[] commandParameters, bool p)
{
    int id = -1;

    using (DbConnection connection = factory.CreateConnection())
    {
        connection.ConnectionString = connectionString;
        using (DbCommand command = factory.CreateCommand())
        {
            command.Connection = connection;
            command.CommandType = commandtype;
            command.CommandText = commandText;
            foreach(SqlParameter pa in commandParameters)
            {
                command.Parameters.Add(pa);
            }
            connection.Open();
            id = command.ExecuteNonQuery();
        }
    }
    return id;
}

我哪里错了?代码将值保存在数据库中。

【问题讨论】:

  • 你还没有说你在观察什么。你声称它“不返回值”——你到底是什么意思?

标签: c# .net sql-server tsql ado.net


【解决方案1】:

请删除SP中的行SET NOCOUNT ON;在SP中,这样你会得到 价值

【讨论】:

    【解决方案2】:

    ExecuteNonQuery 返回受影响的行数。

    如果你的 SQL 语句类似于

     insert into ... values ...
     select @@identity
    

    那么你需要改用ExecuteScalar

    【讨论】:

      【解决方案3】:

      对于 UPDATE、INSERT 和 DELETE 语句,返回值是受命令影响的行数。当正在插入或更新的表上存在触发器时,返回值包括受插入或更新操作影响的行数以及受一个或多个触发器影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,则返回值也是 -1。 看msdn

      但是当您说方法 ExecuteNonQuery 应该返回值时,我不明白您的意思。 如果你想返回一个值,你应该使用ExecuteScalar

      【讨论】:

        【解决方案4】:

        Execute Scalar 仅返回 1 行..而 executenonquety 仅返回受影响的行... ExecuteNonQuery 没有给你返回值...

        【讨论】:

        • 是的,我的意思是它应该返回插入后受影响的行。无论如何我知道我做错了什么。在存储的 Proc 中,我写了 SET NOCOUNT ON。我做了关闭,我的行受到了影响。
        猜你喜欢
        • 1970-01-01
        • 2016-12-23
        • 2011-07-17
        • 2012-03-31
        • 2016-02-28
        • 1970-01-01
        • 2017-01-20
        • 2011-12-28
        相关资源
        最近更新 更多