ExecuteNonQuery不返回值?

时间:2011-04-09 09:17:02

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

我正在尝试编写一个常见的Save函数,我正在使用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;
}

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

4 个答案:

答案 0 :(得分:5)

请删除SP中SP SET NOCOUNT ON; 中的行,这样您就可以获得 价值

答案 1 :(得分:2)

ExecuteNonQuery返回受影响的行数。

如果您的SQL语句类似于

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

然后您需要改为使用ExecuteScalar

答案 2 :(得分:1)

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

但是当你说ExecuteNonQuery方法应该返回值时,我不明白你是什么意思。 如果要返回值,则应使用ExecuteScalar

答案 3 :(得分:-1)

Execute Scalar只返回1行..而executiontenonquery只返回受影响的行... ExecuteNonQuery不会给你返回值......