IDbCommand - CommandType.StoredProcedure

Мне просто любопытно, если IDbCommand.CommandType значение имеет значение с точки зрения производительности?

В принципе, я мог бы сделать либо установить его как CommandType.Textи передайте SQL-запрос "EXEC sp_my_stored_procedure ..." в качестве CommandText. Или я мог бы установить его как CommandType.StoredProcedure и передайте имя хранимой процедуры "my_stored_procedure" в качестве CommandText.

Мне интересно, есть ли здесь какая-то разница в производительности, или это просто вопрос передачи запроса, вызывающего SP против передачи имени SP?


Кстати, я понимаю, что это может зависеть от водителя, но я не уверен. Так что, если это так, я бы тоже хотел это знать. Спасибо!

2 ответа

Решение

Я отразил в объекте Informix: IfxCommand который имеет внутреннее свойство с именем AdjustedCommandText, Кажется, что этот метод форматирует строковое значение для отправки драйверу на основе CommandType.

Что интересно, он либо возвращает одно для TableDirect, либо другое для StoredProcedure. Или просто сохраненный текст. Теперь StoredProcedure идет глубже. Если нет параметров команды, он просто возвращает "EXECUTE PROCEDURE ...", но если есть параметры команды, то он создает строку, начинающуюся с "{?=CALL ..." или {CALL ...".

Таким образом, я могу сказать, что в отношении Informix нет никакой разницы, кроме ясности и чистоты. Что касается других драйверов баз данных, я еще не рассматривал их.

Использование CommandType.StoredProcedure более эффективно. Воздействие будет ощущаться в зависимости от загрузки вашего приложения.

На мой взгляд, это также чище. Я обычно использовал бы CommandType.Text, если бы была необходимость собрать команду во время выполнения (т. Е. SELECT id, имя FROM Table WHERE.......).

Надеюсь, это поможет, Кевин

Другие вопросы по тегам