Использование очень длинных (более 10000 символов) строк в качестве значения SqlParameter - PullRequest
7 голосов
/ 15 сентября 2010

Я пытаюсь выполнить команду вставки в базу данных, и один из столбцов имеет тип nvarchar (MAX). Команда вставки создается с использованием класса .NET SqlCommand, и каждый из параметров представлен одним объектом SqlParameter.

Моя команда выполняется всегда, но когда я передаю строку, длина которой большая (10000+ символов) и которая используется в качестве значения для SqlParameter, сопоставленного столбцу типа nvarchar (MAX) после вставки, этот конкретный столбец оставлено пустым Повторяю, исключение не выдается, команда INSERT выполнена, но столбец пуст.

Следующие примеры показывают, как я пытался создать параметр:

// message is the large string variable
// first solution
insertCommand.Parameters.Add("@message", SqlDbType.NVarChar, -1);

// second solution
insertCommand.Parameters.Add("@message", SqlDbType.NVarChar, message.Length);

// third solution
insertCommand.Parameters.Add("@message", SqlDbType.NVarChar, message.Length * 2);

Ни одно из этих решений не дало результата. Если кто-то знает, в чем проблема, пожалуйста, сообщите мне.

Я использую MS SQL Server 2008.

Заранее спасибо.

Ответы [ 5 ]

6 голосов
/ 15 сентября 2010

Согласно MSDN

NVARCHAR:

Строка. Поток переменной длины Unicode-символов в диапазоне от 1 и 4000 символов. Неявное преобразование завершается ошибкой, если длина строки превышает 4000 символов. Явно установите объект при работе со строками длиной более 4000 символов.

Вот текст:

Строка. Поток переменной длины Данные Unicode с максимальной длиной 2 30 - 1 (или 1 073 741 823) символы.

также проверить это

3 голосов
/ 15 сентября 2010

Вы пробовали звонить AddWithValue(String name, Object value)?

1 голос
/ 15 сентября 2010

Еще одно предложение: используйте SqlDbType.NText вместо SqlDbType.NVarChar.

0 голосов
/ 18 сентября 2010

У вас все еще есть проблема, если вы явно создаете SqlParameter, например:

SqlParameter t = new SqlParameter("@" + name, type);
t.Value = value;

и затем добавляете его к параметрам?

Также, если вы вызываете sproc, простоубедитесь, что параметр sproc также объявлен как nvarchar (max), или если вы не используете sproc, попробуйте использовать его.Я использую varbinary (max) blob без каких-либо проблем, так что, возможно, двоичный файл получит лучшую обработку.

0 голосов
/ 15 сентября 2010

Одно предложение .. Вы пытались использовать SqlDbType.XML ... Нет необходимости разбирать xml на другом конце ... вы можете просто сохранить значение в varchar.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...