Comprimento máximo da string que pode ser retornada do processo armazenado no SQL Server 2008 para aplicativos .net

StackOverflow https://stackoverflow.com/questions/9400934

Pergunta

Estou retornando uma string estática de um procedimento armazenado (no SQL Server 2008) conforme abaixo:

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

Se o comprimento da string estática exceder mais do que algum limite (por exemplo: 8kb), apenas a string parcial (por exemplo: 7kb) será retornada aos aplicativos .net.

Embora eu tenha tentado de maneiras diferentes, como atribuir uma string estática a varchar(max) e selecionando a variável, ainda está retornando apenas uma string parcial.

Devo retornar uma string completa que pode ter no máximo 5 MB.Então, principais preocupações:

  1. Qual é o comprimento máximo da string que posso retornar de um procedimento armazenado
  2. Como retornar uma string de 5 MB do procedimento armazenado para aplicativos .net.

Solicito que alguém possa me ajudar a resolver esse problema.por favor encontre o código abaixo

 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;
                }               
            }

Agradecemos antecipadamente, geeks.

Foi útil?

Solução 2

Obrigado pelo suporte, encontrei uma solução para isso emhttp://www.sqlservercentral.com/Forums/Topic350590-145-1.aspx

Fix é declarar uma variável e deve ser inicializado em uma string vazia e concatenado com a string principal.

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

Se o comprimento da string for <8000, funcionará sem a abordagem acima.

Obrigado a todos.

Outras dicas

Como você parece não estar usando uma conexão OLEDB (que tem um limite de 8k), acho que o problema está no código do procedimento.

Ou, talvez, a versão de compatibilidade de seu banco de dados esteja definida para algo diferente do SQL Server 2008 (o SQL Server 2000 não poderia retornar mais de 8k usando GetString()).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top