2011-11-14 2 views
8

Ive использовал этот метод раньше, чтобы вернуть количество строк. Я запускаю метод insert, вставка отлично работает в хранимой процедуре, но возвращаемое значение из ExecuteNonQuery всегда возвращает -1.C#: 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 вместо фактического числа строк изменилось?

+0

Итак, изменения в таблице действительно имеют место, но вы получаете -1? – Tudor

+0

Вероятно, он возвращает все ваши возвраты sproc, что, вероятно, равно -1, если не указано иное. –

+0

Вы действительно захватили вызов SQL с использованием профилировщика и вручную выполнили, чтобы увидеть фактический номер измененной строки? –

ответ

21

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

- source

5

С Microsoft:

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

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

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

0

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

0

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

Смежные вопросы