Подтвердить что ты не робот

ExecuteNonQuery()

Это мой (грубый) код (DAL):

int i;
// Some other declarations

SqlCommand myCmdObject = new SqlCommand("some query");

conn.open();
i = myCmdObject.ExecuteNonQuery();
conn.close();

Проблема: несмотря на то, что в моем запросе SELECT есть запись, значение в i остается -1.

В чем может быть проблема?

4b9b3361

Ответ 1

Какой запрос вы выполняете? Использование ExecuteNonQuery предназначено для запросов UPDATE, INSERT и DELETE. По документация:

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

Ответ 2

Всякий раз, когда вы хотите выполнить оператор SQL, который не должен возвращать значение или набор записей, следует использовать ExecuteNonQuery.

Итак, если вы хотите запустить инструкцию update, delete или insert, вы должны использовать ExecuteNonQuery. ExecuteNonQuery возвращает количество строк, на которые влияет оператор. Это звучит очень хорошо, но всякий раз, когда вы используете IDE SQL Server 2005 или Visual Studio для создания хранимой процедуры, она добавляет небольшую строку, которая разрушает все.

Эта строка: SET NOCOUNT ON; Эта строка включает функцию NOCOUNT SQL Server, которая "останавливает сообщение о том, что количество строк, на которые ссылается оператор Transact-SQL, возвращается как часть результатов", и поэтому он всегда сохраняет возвращенную процедуру -1, когда вызванный из приложения (в моем случае веб-приложение).

В заключение удалите эту строку из вашей хранимой процедуры, и теперь вы получите значение, указывающее количество строк, на которые влияет инструкция.

Счастливое программирование!

http://aspsoft.blogs.com/jonas/2006/10/executenonquery.html

Ответ 3

Вы используете EXECUTENONQUERY() для INSERT, UPDATE и DELETE.

Но для SELECT вы должны использовать EXECUTEREADER().........

Ответ 5

Не могли бы вы отправить точный запрос? Метод ExecuteNonQuery возвращает переменную @@ROWCOUNT Sql Server, которая когда-либо была после выполнения последнего запроса, является тем, что возвращает метод ExecuteNonQuery.

Ответ 6

Если вы хотите получить только одно целое из запроса, используйте:

myCmdObject.ExecuteScalar()

Ответ 7

Метод ExecuteNonQuery используется для операторов SQL, которые являются не запросами, такими как INSERT, UPDATE,... Вы хотите использовать ExecuteScalar или ExecuteReader, если вы ожидаете, что ваш оператор вернет результаты (т.е. запрос).

Ответ 8

Из MSDN: Метод SqlCommand.ExecuteNonQuery

Вы можете использовать ExecuteNonQuery для выполнять операции с каталогом (для Например, запрос структуры базы данных или создания объектов базы данных такие как таблицы) или изменить данные в базе данных без использования DataSet путем выполнения UPDATE, INSERT или DELETE заявления.

Хотя ExecuteNonQuery возвращается ни строк, ни выходных параметров, ни возвращаемые значения, сопоставленные с параметрами, являются заполнены данными.

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

Вы используете запрос SELECT, таким образом вы получаете -1

Ответ 9

если вы хотите запустить обновление, удалить, или вставить инструкцию, вы должны использовать ExecuteNonQuery. ExecuteNonQuery возвращает количество строк, на которые влияет утверждение.

Как установить счетчик