Параметризованный SqlCommand — преимущество указания SqlDbType?

Близкие,

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


person SFun28    schedule 16.12.2010    source источник


Ответы (4)


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

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

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

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

person marc_s    schedule 16.12.2010

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

person Rockcoder    schedule 16.12.2010

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

person dretzlaff17    schedule 16.12.2010
comment
отличный момент! Я не использую текст Unicode, но если бы я это сделал, это было бы проблемой. - person SFun28; 16.12.2010

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

person Nicole Calinoiu    schedule 16.12.2010
comment
Николь, потеря производительности значительна? - person SFun28; 16.12.2010