SqlCommand Параметры путаницы размеров - PullRequest
18 голосов
/ 28 февраля 2012

У меня есть следующая строка кода:

sqlcommand.Parameters.Add("@LinkID", SqlDbType.Int, 4).Value = linkID;

Но я немного озадачен использованием size. Это говорит о том, что его 4 байта в размере? Или длина 4, так что 1234 приемлемо, но 12345 слишком велико?

Ответы [ 4 ]

27 голосов
/ 28 февраля 2012

Для типов с размером исправления вы должны пропустить этот аргумент, просто:

sqlcommand.Parameters.Add("@LinkID", SqlDbType.Int).Value = linkID;

Аргумент размера имеет значение только для параметров с типом, который может иметь переменный размер, например varchar, nvarchar и т. Д.

6 голосов
/ 28 февраля 2012

Размер составляет 4 байта для int.

См. Класс DbParameter для msd n для получения дополнительной информации.Это актуально, потому что SqlCeParameter реализует DbParameter

Актуален следующий раздел:

Свойство Size используется для двоичных и строковых типов.

ДляНестроковые типы данных и строковые данные ANSI, свойство Size относится к числу байтов.Для строковых данных Юникода размер относится к числу символов.В число строк не входит завершающий символ.

Для типов данных переменной длины параметр Size определяет максимальный объем данных, передаваемых на сервер.Например, для строкового значения Unicode, Size может использоваться для ограничения объема данных, отправляемых на сервер, до первых ста символов.

См. Это https://gist.github.com/1932766 для реализациисвойства Size.

2 голосов
/ 28 февраля 2012

если вы собираетесь использовать int, я думаю, что не имеет значения, какой у него размер.

, поэтому ваш код будет

sqlcommand.Parameters.Add("@LinkID", SqlDbType.Int).Value = linkID; 

для varchar, navarchar, где размер равенmaater вам нужно указать размер в вашем .net коде, т.е. в параметре

2 голосов
/ 28 февраля 2012

Это 4 байта, 32 бита. Это 32-разрядное целое число.

...