Какой размер вы используете для varchar (MAX) в объявлении параметров?


190

Я обычно устанавливаю размер столбца при создании параметра в ADO.NET

Но какой размер я должен использовать, если столбец VARCHAR(MAX)?

cmd.Parameters.Add("@blah", SqlDbType.VarChar, ?????).Value = blah;

Ответы:


288

В этом случае вы используете -1.


5
Есть ли какой-либо недостаток производительности при установке всех длин параметра на -1, поэтому мне не нужно вести список соответствия БД?
Эндрю Баллок

1
Varchar (max) обрабатывается идентично varchar (8000) для значений менее 8000 байтов. Для больших значений поле обрабатывается как текстовое поле (также называемое «CLOB»). Это может повлиять на оптимизацию плана запроса и эффективность извлечения строк с большими значениями в этом столбце, так как данные хранятся «вне строки», что требует дополнительного поиска.
KeithS

Используйте nvarchar (max) в sql и определите длину -1 с помощью SqlDbType.NVarchar в c #
Ромил Кумар Джайн

Если бы не ответ Сэма Мешеши ниже - я бы пропустил ваш ответ. Ваш ответ может получить больше голосов, если вы поместите образец строки кода в формате кода.
qxotk

51

Для тех из нас, кто не видел -1 Михала Чаневски, полная строка кода:

cmd.Parameters.Add("@blah",SqlDbType.VarChar,-1).Value = "some large text";

2

Максимальный размер SqlDbType.VarChar составляет 2147483647.

Если бы вы использовали общее соединение oledb вместо sql, я обнаружил, что здесь также есть тип данных LongVarChar. Его максимальный размер 2147483647.

cmd.Parameters.Add("@blah", OleDbType.LongVarChar, -1).Value = "very big string";

1

Вам не нужно передавать параметр size, просто объявляйте, Varcharчто он уже понимает, что это MAX:

cmd.Parameters.Add("@blah",SqlDbType.VarChar).Value = "some large text";

1
Это может иметь негативные последствия для вашего сервера SQL из-за того, как рассчитывается план выполнения.
Яаков

Я обнаружил, что это не тот случай, когда используется выходной параметр. Это приводит к следующей ошибке «Exception: String [2]: свойство Size имеет недопустимый размер 0.» Чтобы исправить это, используйте Size = -1, см. Stackoverflow.com/questions/21087950/…
Michael K

1

Если вы делаете что-то вроде этого:

    cmd.Parameters.Add("@blah",SqlDbType.VarChar).Value = "some large text";

Размер будет взят из "некоторого большого текста". Длина

Это может быть проблематично, когда это выходной параметр, вы получаете больше символов, чем вводите.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.