Який розмір ви використовуєте для varchar (MAX) у своїй декларації параметрів?


190

Я зазвичай встановлюю розмір стовпця під час створення параметра в ADO.NET

Але який розмір я використовую, якщо стовпець VARCHAR(MAX)?

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

Відповіді:


288

У цьому випадку ви використовуєте -1.


5
Чи є недолік продуктивності для встановлення всіх параметрів довжини до -1, тому я не повинен підтримувати список відповідності db?
Ендрю Буллок

1
Варчар (max) трактується ідентично варчару (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

Вам не потрібно передавати параметр розміру, просто оголосити Varcharвже розуміє, що це MAX як:

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

1
Це може мати негативний вплив на ваш SQL-сервер через те, як обчислюється План виконання.
yaakov

Я виявив, що це не так у випадку використання вихідного параметра. Це призводить до такої помилки `Виняток: Рядок [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.