У меня есть классический ASP-приложение с базой данных SQL2012. Недавно я изменил столбец таблицы с varchar (8000) на varchar (max), поскольку он был недостаточно большим для хранения необходимых данных.
Я могу обновить столбец всеми данными, которые мне нужно сохранить, но SP, который я использую для возврата данных столбца в качестве выходного параметра, возвращает только 4000 символов (по крайней мере, это то, что дает мне результат следующего кода:
Len(cmd.Parameters("@detail").Value)
Я использую следующее объявление параметра как часть вызова SP:
cmd.Parameters.Append cmd.CreateParameter("@detail", 8, 2, -1, strDetail)
8 - значение для adBStr. Я пробовал изменить 8 на 200, 201 и 203, но это дает следующую ошибку:
Ошибка: 800a0e7c
Описание:
Объект параметра определен неправильно. Была предоставлена непоследовательная или неполная информация.
Я думал, что обновление данных будет сложной задачей, но я просто не могу понять, как получить все содержимое столбца.
Я возвращаю DATALENGTH столбца, и он говорит, что он имеет длину 10 536, но я получаю только 4000 символов, включая пробелы, возвращаемые через выходной параметр. Я вижу все данные (10 тыс. Символов) из Visual Studio, поэтому знаю, что они там есть.
Моя строка подключения Provider = SQLOLEDB.1. Может ли это быть проблемой? Должен ли я использовать более новый поставщик OLE DB для собственного клиента SQL Server 11.0 - SQLNCLI11?
У кого-нибудь есть идеи?
Привет, Майк.
cmd.Parameters.Append cmd.CreateParameter("@detail", 200, 3, -1, strDetail)
? - Предпочитайте использовать константы ADO, добавляяmetadata
вglobal.asa
, чтобы былоcmd.Parameters.Append cmd.CreateParameter("@detail", adVarChar, adParamInputOutput, -1, strDetail)
см. это отличный ресурс, которым я клянусь. По какой причине вы используетеadParamInputOutput
(3) вместоadParamInput
(1)? - person user692942   schedule 10.02.2014nvarchar
, а неvarchar
, что будет 8000 символов. Это база данных SQL Server 2008, отражает ли это режим совместимости? Это все, что я могу придумать, единственное, что я могу придумать, что заставило бы тип данных стоять в строке. Возможно, этот поток поможет. - person user692942   schedule 12.02.2014"You have to be using SQL Native Client, and not SQLOLEDB. Because SQLOLEDB only understands old-school LOB types, the new large-value types get mapped to old-school LOB types at run-time if you're using SQLOLEDB"
- person user692942   schedule 12.02.2014