2

这是 SQL CLR,我只是想创建一个从 SQL 接收 XML 的函数,然后获取某个节点的值并返回它:

[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

如果是这种情况,那么我不能执行上述操作,因为我不再处理 an XmlDocument(没有DocumentElement/selectSingleNode等)。

为 s 执行此操作的正确方法是什么SqlXml

此外,当我尝试部署它时,我不断得到它(我认为这与XmlDocument我试图作为参数传递):

开始将程序集 SolutionName.dll 部署到服务器 localhost:DATABASE

如果部署为与 SQL Server 目标实例不兼容的 .NET Framework 版本构建的 SQL CLR 项目,则可能会出现以下错误:“部署错误 SQL01268:为程序集创建程序集失败,因为程序集验证失败”。要解决此问题,请打开项目的属性,然后更改 .NET Framework 版本。

c:\****** name.dll:部署错误:无法为参数 System.Xml.XmlDocument xmlDoc 创建类型

构建失败。

经过时间 00:00:01.96

========== 构建:1 个成功或最新,0 个失败,0 个跳过 ==========

========== 部署:0 成功,1 失败,0 跳过 ==========

任何人都可以帮我一把吗?

XML 截图:

4

1 回答 1

0

我认为您的 xmldoc.load 拥有秘密。如果您只是将 xml 作为字符串传递给 clr 过程怎么办。然后您可以创建 xmlDoc 并将其加载到字符串的 clr 中。

如果这不起作用,这个线程似乎接近你所说的:CLR Link

我不能说错误......但上面的字符串方法可能会解决你的问题。

于 2013-01-29T18:03:43.557 回答