2009-03-10 11 views
0

Ich habe eine gespeicherte Prozedur, die einen XML-Parameter (SqlDbType.Xml) akzeptiert, der von einem bestimmten .NET/ADO.NET-Code aufgerufen wird. Ich habe dies über eine Testumgebung mit einem System.XML.XMLReader getestet, um Test-XML aus einer Datei zu lesen.Konvertieren von MSXML DOMDocument, das als Wert für SqlDbType.Xml verwendet werden soll ADO.NET-Parameter

Dim xmlParam As SqlParameter = New SqlParameter("@xml", SqlDbType.Xml) 
xmlParam.Value = New SqlTypes.SqlXml(XmlReader.Create(txtXMLFile.Text)) 
.Parameters.Add(xmlParam) 

Bei der Anwendung dieser Code in sich geht, ist die eigentliche XML in einem VB6-Objekt, in einem MSXML2.DOMDocument40 Objekt (das VB6 Projekt verweist MSXML4) Ich habe gearbeitet, wie die MSXML.DOMDocument40 über Marschall zu .NET von VB6 - tatsächlich verweist das .NET-Projekt bereits auf MSXML4, so dass alles in Ordnung ist. Alles, was ich jetzt tun muss, ist, diese richtig zu konvertieren, damit sie in den gespeicherten Prozess übergeben werden kann.

System.XML.XMLReader hat eine Reihe von Überladungen, die Stream-Objekte nehmen, ich frage mich, ob ich einen Stream oben auf dem MSXML-Objekt erstellen kann? Oder wenn ich die MSXML in einen .NET XML-Typ konvertieren kann, der dann verwendet werden kann?

Offensichtlich wird die Leistung eine Überlegung sein, aber für den Moment muss ich nur herausfinden, wie es geht!

Antwort

0

Die bessere Idee ist, MSXML und .NET überhaupt nicht zu mischen.

Wenn Sie müssen, dann erhalten Sie die XML-Zeichenfolge aus dem MSXML-Objekt, und erstellen Sie entweder einen XmlReader über die Zeichenfolge, oder laden Sie die Zeichenfolge in ein XmlDocument.

+0

Dank - ja es stellte sich einfacher aus als ich am Ende gedacht - habe ich gerade einen XMLTextReader die Zeichenfolge MSXMLDoc.XML vorbei - keine Notwendigkeit für die Umwandlung in XMLDocument Leider nur habe ich nicht die Möglichkeit, zu arbeiten, mit .NET ist Interop eine Tatsache des Lebens! Vielen Dank – DannykPowell

0

Das MSXML-DOM speichert alles, was die COM-IStream-Schnittstelle implementiert. Wenn Sie also eine Implementierung finden, die einem .NET-Stream zugeordnet ist, sollten Sie dies ziemlich effizient erreichen können.