Почему Non в ExecuteNonQuery?

Я знаю, что это не чертовски полезный вопрос, но я не могу не прослушиваться им.

Итак,
Почему указанный метод (в *Command классах) называется
ExecuteNonQuery вместо ExecuteQuery?

Разве те операторы SQL, которые мы бросаем в БД, не запросы?


person Camilo Martin    schedule 14.05.2010    source источник


Ответы (3)


Семантически запрос — это то, что вы выполняете для возврата данных. Вы «запрашиваете» базу данных, чтобы найти все X в Y.

Если вы не ожидаете обратных результатов, это не столько запрос, сколько оператор или команда.

person Tejs    schedule 14.05.2010
comment
Но это может быть SELECT. Так почему бы не просто myCommand.Execute()? - person Camilo Martin; 14.05.2010
comment
@Camilo: Потому что есть ExecuteReader(), который вернет результаты вашего запроса, или даже ExecuteScalar() для однозначных результатов. - person Will Marcouiller; 14.05.2010
comment
Спасибо, я не знал о ExecuteScalar :) - person Camilo Martin; 14.05.2010

Нет, если это INSERT, DELETE, CREATE TABLE и т. д.

person Marcelo Cantos    schedule 14.05.2010
comment
Но метод, который может выполнить запрос (т. е. SELECT), не должен называться ExecuteNonQuery. Вот что меня беспокоит. - person Camilo Martin; 14.05.2010
comment
Он может выполнить SELECT, но нет смысла использовать ExecuteNonQuery с SELECT, потому что на самом деле он не возвращает результат. - person Dean Harding; 14.05.2010
comment
@Camilo классы БД не знают, нужен ли вам ответ, явно сообщающий объекту БД, что вы ничего не ожидаете в ответ, освобождает место для оптимизации. Вы, как разработчик, можете не захотеть, чтобы что-либо возвращалось оператором select (выберите * в... для одного) - person Rune FS; 14.05.2010
comment
Спасибо Rune FS, это имеет смысл. - person Camilo Martin; 14.05.2010

Я бы подумал об этом как о запросе к базе данных для возврата записей. Действия, которые изменяют данные/базу данных, не будут запросом.

person Jon    schedule 14.05.2010