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しかし、その後、パラメータをではなくas として宣言すべきではないことに気付きましたXmlDocument xmlDoc

その場合は、XmlDocumentもう扱っていないため、上記のことはできません ( DocumentElement/selectSingleNodeなどはありません)。

sに対してこれを行う正しい方法は何でしょうSqlXmlか?

XmlDocumentまた、これをデプロイしようとすると、これを取得し続けます(これは、パラメーターとして渡そうとしていることと関係があると思います):

アセンブリ SolutionName.dll のサーバー localhost : DATABASE への展開を開始します

SQL Server のターゲット インスタンスと互換性のないバージョンの .NET Framework 用にビルドされた SQL CLR プロジェクトを展開すると、次のエラーが表示されることがあります: "展開エラー SQL01268: アセンブリの検証に失敗したため、アセンブリの CREATE ASSEMBLY が失敗しました"。この問題を解決するには、プロジェクトのプロパティを開き、.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 リンク

エラーについては言えませんでしたが、上記の文字列メソッドで問題が解決する場合があります。

于 2013-01-29T18:03:43.557 に答える