SqlParameter Size – негативные последствия установки максимального размера?

StackOverflow https://stackoverflow.com/questions/139971

  •  02-07-2019
  •  | 
  •  

Вопрос

У меня есть SqlCommand, который я хочу вызвать Подготовка(), для которого CommandType = Text (он не могу быть хранимой процедурой).Для этого мне нужно установить атрибут Size в параметрах ненулевым, в противном случае будет выдано исключение.Есть ли какие-либо негативные последствия от установки размера всех параметров на максимально возможный размер, даже если размер фактических значений никогда не приблизится к этому?Есть лучший способ сделать это?

Это было полезно?

Решение

Я думаю, что единственным потенциальным негативным побочным эффектом от подобных действий будет стоимость выделения памяти для параметров.

Поскольку вы вызываете «Prepare()», я предполагаю, что вы планируете использовать SqlCommand несколько раз для одного и того же SqlConnection, который предлагает отдельный раздел кода, где он может быть использован (если соединение закрывается для подготовленной команды , текст команды придется повторно передать на сервер при следующем использовании).

Если вы знаете природу своих параметров, похоже, вы можете иметь некоторое представление об их потенциальных размерах.Если нет, то я на самом деле не вижу, какая альтернатива у вас есть, кроме как объявить значительно большой размер для каждого - достаточно большой, чтобы хранить большинство/любые потенциальные значения.

Другие советы

Именно так это делает платформа, если вы используете конструктор SqlParameter, который просто принимает имя параметра и значение.На стороне клиента может быть небольшая неэффективность, но я никогда не замечал разницы в производительности запросов.

Учитывая, что вы используете CommandType = Text, вы сможете программно установить размер в соответствии с фактическим размером отправляемого параметра.

Снижение производительности должно наблюдаться только тогда, когда размер ваших данных приближается к максимальному размеру отправляемых вами типов данных.Если ваши параметры всегда велики по сравнению с размером текста команды, с точки зрения сетевого трафика вы увидите лишь минимальный прирост производительности при переключении на хранимые процедуры.

Пожалуйста, выложите образец вашего кода.Вам не нужно устанавливать атрибуты размера для ваших параметров, чтобы вызвать .Prepare().

Кстати, вам, вероятно, не обязательно вызывать .Prepare(), особенно если вы вызываете .Execute() сразу после этого.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top