2010-05-14 4 views
15

Я знаю, что это не ад полезный вопрос, но я не могу не прослушивать его.Почему «Non» в «ExecuteNonQuery»?

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

Не те ли SQL-запросы, которые мы бросаем в БД, запросы?

ответ

15

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

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

+0

Но это может быть SELECT. Так почему бы не просто «myCommand.Execute()»? –

+0

@Camilo: поскольку ExecuteReader() возвращает результаты вашего запроса или даже ExecuteScalar() для однозначных результатов. –

+0

Спасибо, я не знал о ExecuteScalar :) –

1

Не, если они являются вставки, удаления, создания таблиц и т.д.

+0

Но метод, который ** может ** выполнять запрос (т. Е. SELECT), не должен называться ExecuteNonQuery. Это меня беспокоит. –

+2

Это * может * выполнить 'SELECT', но нет смысла использовать' ExecuteNonQuery' с 'SELECT', потому что он фактически не возвращает результат. –

+2

@Camilo классы DB не знают, нужен ли вам ответ, явно указывающий на объект базы данных, что вы не ожидаете чего-либо обратно, что создает возможности для оптимизации. Вы, как разработчик, может не захотеть ничего, возвращаемого оператором select (выберите * в ... для одного) –

0

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