c #: ExecuteNonQuery () возвращает -1 - PullRequest
10 голосов
/ 14 ноября 2011

Я использовал этот метод, прежде чем вернуть количество измененных строк. Я для запуска метода вставки, вставка работает нормально в хранимой процедуре, но возвращаемое значение из ExecuteNonQuery всегда возвращает -1.

Вот мой код C #:

int ret = 0;

using (SqlConnection conn = new SqlConnection(this.ConnectionString))
{
    using (SqlCommand cmd = new SqlCommand(QueryName, conn))
    {
        conn.Open();

        if (Params != null)
            cmd.Parameters.AddRange(Params);

        cmd.CommandType = CommandType.StoredProcedure;

        ret = cmd.ExecuteNonQuery();

        conn.Close();
    }
}

return ret;

Почему я получаю -1 вместо фактического количества измененных строк?

Ответы [ 4 ]

23 голосов
/ 14 ноября 2011

Если вы используете этот метод для вызова хранимой процедуры, которая выполняет UPDATE / INSERT в таблице метод возвращает -1, если хранится procudere имеет значение SET NOCOUNT в положении ON.

источник

7 голосов
/ 14 ноября 2011

от Microsoft:

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

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx

Возможно, вы получаете -1, потому что вы используете хранимую процедуру, а не прямое изменение таблицы

0 голосов
/ 28 января 2016

Получить вывод числа строк из хранимой процедуры, например, используя @rowCount=@@Rowcount. В DAL используйте dbManager.AddOutParameter("RowCount", DbType.Int32, rowCount); Затем в последних строках вы получите как (int)dbManager.GetParameterValue("RowCount").

0 голосов
/ 14 ноября 2011

Какое значение вы возвращаете из хранимой процедуры?Можете ли вы показать код для вашей хранимой процедуры.Вероятно, вам нужно отредактировать вашу хранимую процедуру, чтобы она возвращала требуемое значение, ИЛИ, ваша хранимая процедура возвращает -1 либо специально, либо переменная, которую возвращает хранимая процедура, имеет -1 в качестве значения.

...