Максимальная длина строки, которую можно вернуть из хранимого процесса в SQL Server 2008 в приложения .net - PullRequest
0 голосов
/ 22 февраля 2012

Я возвращаю статическую строку из хранимой процедуры (в SQL Server 2008), как показано ниже:

select 'abcdefgh.........xyz'

Если длина статической строки превышает некоторый предел (например, 8 КБ), тогда только частичная строка (например: 7 КБ) возвращается в приложения .net.

Хотя я пытался по-разному, например, присвоить статическую строку varchar(max) и выбрать переменную, по-прежнему возвращается только частичная строка.

Я должен вернуть полную строку, которая может быть не более 5 МБ. Итак, основные проблемы:

  1. Какова максимальная длина строки, которую я могу вернуть из хранимой процедуры
  2. Как вернуть строку 5 Мб из хранимой процедуры в приложения .net.

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

 using (SqlCommand command = new SqlCommand(Source.GetExportRecordSP, Connection))
            {
                command.CommandType = CommandType.StoredProcedure;
                command.Parameters.Add(new SqlParameter("@CandidateRecordID ", SqlDbType.NVarChar, 32)).Value = record;
                try
                {
                    if (Connection.State != ConnectionState.Open)
                    {
                        Connection.Open();
                    }
                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                    if(reader.Read())
                        {
                            xmlRecord = new XmlDocument();
                            xmlRecord.LoadXml(reader.GetString(0));
                        }
                    }
                }
                catch (Exception Ex)
                {
                    Logging.WriteError(string.Format("Error while retrieving the Record \"{0}\" details from Database. Exception: {1} ", Ex.ToString()));
                    throw;
                }               
            }

Заранее спасибо, гики.

Ответы [ 2 ]

0 голосов
/ 23 февраля 2012

Спасибо за поддержку, я нашел 1 исправление для этого в http://www.sqlservercentral.com/Forums/Topic350590-145-1.aspx

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

  DECLARE @test varchar(MAX);
set @test =''
 select  @test = @test + '<Invoice>.....'

Если длина строки <8000, она будет работать без вышеуказанного подхода. </p>

Спасибо всем.

0 голосов
/ 23 февраля 2012

Поскольку вы, похоже, не используете соединение OLEDB (с ограничением в 8 КБ), я думаю, что проблема в коде вашей процедуры.

Или, возможно, версия вашей базы данных совместимость настроена на что-то отличное от SQL Server 2008 (SQL Server 2000 не может возвратить более 8 Кбайт, используя GetString()).

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