Longueur maximale de la chaîne qui peut être renvoyée du proc stocké dans SQL Server 2008 aux applications .NET

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

Question

Je renvoie une chaîne statique à partir d'une procédure stockée (dans SQL Server 2008) comme ci-dessous:

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

Si la longueur de chaîne statique dépasse plus qu'une limite (par exemple: 8KB), seule la chaîne partielle (par exemple: 7KB) est renvoyée aux applications .NET.

Bien que j'aie essayé de différentes manières comme attribuer une chaîne statique à varchar(max) et la sélection de la variable ne renvoie toujours que la chaîne partielle.

Je devrais retourner une chaîne complète qui pourrait être de maximum de 5 Mo. Donc, principales préoccupations:

  1. Quelle est la longueur maximale de la chaîne que je peux revenir d'une procédure stockée
  2. Comment retourner 5 Mo de chaîne de la procédure stockée aux applications .NET.

Je demande que quelqu'un puisse m'aider à résoudre ce problème. Veuillez trouver le code ci-dessous

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

Merci d'avance les geeks.

Était-ce utile?

La solution 2

Merci pour le soutien, j'ai trouvé 1 correctif pour cela àhttp://www.sqlservercentral.com/forums/topic350590-145-1.aspx

Fix est, déclare une variable, et doit être initié à la chaîne vide et concaténé avec la chaîne principale.

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

Si la longueur de chaîne est <8000, elle fonctionnera sans l'approche ci-dessus.

Merci a tous.

Autres conseils

Puisque vous semblez ne pas utiliser une connexion OLEDB (qui a une limite de 8k), je pense que le problème est dans votre code de procédure.

Ou, peut-être, le compatibilité La version de votre base de données est définie sur autre chose que SQL Server 2008 (SQL Server 2000 n'a pas pu retourner plus de 8k en utilisant GetString()).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top