ExecuteNonQuery не возвращает значение? - PullRequest
2 голосов
/ 09 апреля 2011

Я пытаюсь написать общую функцию сохранения, и я использую 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 ]

5 голосов
/ 09 апреля 2011

Пожалуйста, удалите строку в SP SET NOCOUNT ON; в SP, чтобы вы получили значение

2 голосов
/ 09 апреля 2011

ExecuteNonQuery возвращает количество затронутых строк.

Если ваш SQL-оператор похож на

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

Тогда вам нужно использовать ExecuteScalar.

1 голос
/ 09 апреля 2011

Для операторов UPDATE, INSERT и DELETE возвращаемое значение - это количество строк, затронутых командой.Если для вставляемой или обновляемой таблицы существует триггер, возвращаемое значение включает количество строк, на которые влияет операция вставки или обновления, а также количество строк, на которые влияет триггер или триггеры.Для всех других типов операторов возвращаемое значение равно -1.Если происходит откат, возвращаемое значение также равно -1.посмотрите на msdn

Но я не понимаю, что вы имеете в виду, когда сказали, что метод ExecuteNonQuery должен возвращать значение.Если вы хотите вернуть значение, вы должны использовать ExecuteScalar

0 голосов
/ 09 апреля 2011

Execute Scalar возвращает только 1 строку ... и executetenonquety возвращает только затронутые строки ... ExecuteNonQuery не дает вам возвращаемых значений ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...