Работа с параметром SqlXml в методе SQLCLR
Это SQL CLR, я просто пытаюсь создать функцию, которая получает XML из SQL, а затем получает значение для определенного узла и возвращает его:
[SqlFunction]
public static SqlString FnGetQuoteNumber(XmlDocument xmlDoc)
{
string nodeValue = null;
xmlDoc.Load(xmlDoc.ToString());
XmlNode node = xmlDoc.DocumentElement.SelectSingleNode("//Identifier[@name='Item1']");
if (xmlDoc.DocumentElement != null)
{
nodeValue = node.Attributes["value"].Value;
}
return new SqlString(nodeValue);
}
Но затем я понял, что мой параметр не должен быть объявлен как
SqlXml xmlDoc, а не XmlDocument xmlDoc?Если это так, то я не могу сделать вышеописанное, потому что я больше не имею дела с XmlDocument (нет DocumentElement/selectSingleNode, и т.д.).
Каков был бы правильный способ сделать это для SqlXmls?
Также, когда я пытаюсь разверните это, я продолжаю получать это (что, я думаю, связано с XmlDocument, который я пытаюсь передать в качестве параметра):
Начало развертывания Assembly SolutionName.dll для сервера localhost: DATABASE
При развертывании проекта SQL CLR, созданного для версии .NET Framework, несовместимой с целевым экземпляром SQL Server, может появиться следующая ошибка: "Ошибка развертывания SQL01268: создать сборку для сборки не удалось, поскольку сборка не прошла проверку". Чтобы устранить эту проблему, откройте свойства проекта и измените версию платформы .NET Framework.
C: * * * * * * имя.dll : ошибка развертывания: не удалось создать тип для системы параметров.XML.XmlDocument xmlDoc
Сборка не удалась.
Время Истекло 00: 00: 01.96
========== Сборка: 1 успешно или актуально, 0 неудачно, 0 пропущено ==========
========== развертывание: 0 успешно, 1 не удалось, 0 пропущено ==========
Любой может дать мне рука?
Скриншот XML:

1 ответ:
Я думаю, ваш xmldoc.груз хранит тайну. Что делать, если вы просто передали xml как строку в процедуру clr. Затем вы можете создать xmlDoc и загрузить его в clr из строки.
Если это не сработает, этот поток, казалось, был близок к тому, о чем вы говорили:CLR Link
Я не мог сказать об ошибке...но метод, описанный выше, может решить вашу проблему.
Comments