2010-04-19 9 views
0

Je vais avoir une exigence où j'enregistrer un ensemble de données qui a plusieurs tables dans une colonne XML de table SQL en convertissant en un XML.Enregistrement d'un énorme ensemble de données dans la table SQL dans une colonne XML - MS SQL, C# .Net

Le problème est que dans certains cas, l'ensemble de données se développe très énorme et je reçois OutOfMemoryException.

Ce que je fais est essentiellement que je convertir l'ensemble de données dans un fichier xml et enregistrez-le sur le disque local, puis charger le nouveau XML et de l'envoyer comme paramètre de procédure stockée. Mais quand j'écris l'ensemble de données xml dans le disque, la taille du fichier dépasse 700 Mo et quand je le charge dans l'objet XMLDocument en mémoire, je reçois OutOfMemoryException.

Comment obtenir le xml du jeu de données sans l'enregistrer dans un fichier et relire encore?

code pour la lecture du XML à partir du jeu de données

MemoryStream msXML = new MemoryStream(); 
MemoryStream msXMLSchema = new MemoryStream(); 

XmlWriter xmlWriter = XmlWriter.Create(msXML); 
XmlWriter xmlSchemaWriter = XmlWriter.Create(msXMLSchema); 

dsContract.WriteXml(xmlWriter); 
dsContract.WriteXmlSchema(xmlSchemaWriter); 

xmlWriter.WriteStartDocument(); 
xmlWriter.WriteEndDocument(); 

xmlSchemaWriter.WriteStartDocument(); 
xmlSchemaWriter.WriteEndDocument(); 

XmlReader xmlReader = XmlReader.Create(msXML); 
XmlReader xmlSchemaReader = XmlReader.Create(msXMLSchema); 

XmlDocument contractHistoryXMLDoc = new XmlDocument(); 
XmlDocument contractHistoryXMLSchemaDoc = new XmlDocument(); 

contractHistoryXMLDoc.Load(xmlReader); 
contractHistoryXMLSchemaDoc.Load(xmlReader); 

code permettant d'enregistrer les données XML dans le fichier XML Colonne

Les envoyer comme paramètres USP

param = new SqlParameter("@XmlValue", SqlDbType.Xml); 
param.Direction = ParameterDirection.Input; 
param.Value = new XmlNodeReader(historyXML); 
sqlcom.Parameters.Add(param); 
param = new SqlParameter("@xmlSchemaHistory", SqlDbType.Xml); 
param.Direction = ParameterDirection.Input; 
param.Value = new XmlNodeReader(historyXMLSchema); 
sqlcom.Parameters.Add(param); 

Merci

NLV

+0

Indiquez le code d'enregistrement du fichier dans la base de données. – Oded

+0

J'ai ajouté le code maintenant. – NLV

Répondre

0

Nous avons divisé le DataSet et l'avons enregistré dans plusieurs colonnes XML.

-1

Utilisez la méthode Data.DataSet.GetXML(). Cela retournera une énorme chaîne.

+0

chaîne a une taille limite. Vous obtiendrez une exception lorsque vous appelez DataSet.GetXML(). – NLV

+1

@NLV: la chaîne n'a pas de limite de taille. Qu'est-ce qui te fait penser que c'est le cas? –

+0

Désolé j'avais tort. Lorsque vous effectuez un DataSet.GetXml() vous obtenez OutOfMemoryException si l'ensemble de données est énorme. – NLV

Questions connexes