Longueur maximale de la chaîne qui peut être renvoyée du proc stocké dans SQL Server 2008 aux applications .NET
-
29-10-2019 - |
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:
- Quelle est la longueur maximale de la chaîne que je peux revenir d'une procédure stockée
- 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.
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()
).