Преобразовать MSXML DOMDocument для использования в качестве значения параметра SqlDbType.Xml ADO.NET - PullRequest
0 голосов
/ 10 марта 2009

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

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, так что все в порядке. Теперь все, что мне нужно сделать, это правильно преобразовать это, чтобы оно могло быть передано в сохраненный процесс.

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

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

Ответы [ 2 ]

0 голосов
/ 10 марта 2009

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

0 голосов
/ 10 марта 2009

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

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

...