2009-03-10 4 views
0

У меня есть хранимая процедура, которая принимает параметр xml (SqlDbType.Xml), который вызывается из некоторого кода .NET/ADO.NET. Я протестировал это через тестовый жгут с помощью System.XML.XMLReader, чтобы прочитать некоторый тестовый XML-файл;Преобразование MSXML DOMDocument для использования в качестве значения для параметра SqlDbType.Xml ADO.NET

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

В приложении этот код будет в, фактический XML в объекте VB6, в объекте MSXML2.DOMDocument40 (проект VB6 ссылки Msxml4) Я работал, как маршал MSXML.DOMDocument40 через .NET от VB6 - на самом деле .NET-проект уже ссылается на MSXML4, так что все в порядке. Теперь все, что мне нужно сделать, - это правильно преобразовать его, чтобы он мог быть передан в сохраненный proc.

System.XML.XMLReader имеет ряд перегрузок, которые берут объекты потока, мне интересно, могу ли я создать поток поверх объекта MSXML? Или, если я могу преобразовать MSXML в .NET XML-тип, который затем можно использовать?

Очевидно, что производительность будет рассматриваться, но на данный момент мне просто нужно разобраться, как это сделать!

ответ

0

Лучше всего не смешивать MSXML и .NET вообще.

Если вам нужно, то получите строку xml из объекта MSXML и либо создайте XmlReader над строкой, либо загрузите строку в XmlDocument.

+0

Спасибо - да, это оказалось проще, чем я думал, что в конце концов - я просто использовал XmlTextReader передавая ему строку MSXMLDoc.XML - нет необходимости в преобразовании в XMLDocument К сожалению, я не имею возможность работать только с .NET, interop - это факт жизни! благодаря – DannykPowell

0

MSXML DOM сохранит что-либо, реализует интерфейс COM IStream, поэтому, если вы можете найти реализацию того, что сопоставляется с потоком .NET, вы сможете добиться этого достаточно эффективно.