Параметризованный SqlCommand - преимущество указания SqlDbType? - PullRequest
8 голосов
/ 16 декабря 2010

Люди,

Если я не ошибаюсь, можно создать параметризованный SQL-запрос, указав SqlDbType для каждого параметра или нет. Кажется, что я могу построить SqlParameter, указав только имя параметра и значение параметра. В чем преимущество указания SqlDbType?

Ответы [ 4 ]

6 голосов
/ 16 декабря 2010

Преимущество: у вас есть четкий контроль над тем, каким SqlDbType будет параметр.

В противном случае ADO.NET должен сделать предположение, основываясь на значении, которое вы предоставляете, например, в .AddWithValueметод.Эти догадки в большинстве случаев довольно хороши - но если вы, например, предоставите DBNull.Value, сделать довольно хорошо продуманное предположение будет немного сложно ...

Кроме того, если вы предоставите строку, эточасто полезно иметь возможность указывать макс.длина этого строкового параметра (x в определении VARCHAR(x) в вашем сохраненном процессе).Если вы этого не сделаете, ADO.NET будет использовать текущую длину, а иногда это может быть хорошо или плохо.

В целом: это просто дает вам больше контроля, и это более четко / ясноваши намерения.

2 голосов
/ 16 декабря 2010

Если вы укажете SqlDbType, вы убедитесь, что значение, предоставленное вами для параметра, проверено на соответствие предоставленному SqlDbType, поэтому, если данные не подходят, вы обнаружите ошибку раньше (в противном случае вы получите исключение из SQL Server).

1 голос
/ 16 декабря 2010

Я согласен с тем, что при использовании определенного SqlDbType вы получаете больше контроля.Другая причина, по которой вам нужен больший контроль при работе с текстом, - это работа с текстом в кодировке Юникод.Например, используя SqlDbType.NVarChar Vs SqlDbType.VarChar.

0 голосов
/ 16 декабря 2010

Основным преимуществом является производительность. Если вы не укажете тип параметра, механизм SqlClient выведет его из значения параметра. Если вы знаете тип параметра во время разработки, указание его является простым способом избежать затрат на шаг вывода.

...