1

SharePoint サイトからデータを取得する SQL CLR 関数を作成しました。これは SQL に戻る部分です。

public static void GetListItemInfo(
                        object obj,
                        out SqlString Name,
                        out SqlString SO,
                        out SqlString LineNumber,
                        out SqlString SerialNumber,
                        out SqlString Certificates,
                        out SqlString Tags,
                        out SqlString RevisionNumber)
    {
        DataRow r = (DataRow)obj;
        Name = new SqlString(r["ows_LinkFilename"].ToString());
        SO = new SqlString(r["ows_SO"].ToString());
        LineNumber = new SqlString(r["ows_Line_x0020_Number"].ToString());
        SerialNumber = new SqlString(r["ows_Unit_x0020_Number"].ToString());
        Certificates = new SqlString(r["ows_Certificate_x0020_Type"].ToString());
        Tags = new SqlString(r["ows_Tags"].ToString());
        RevisionNumber = new SqlString(r["ows_Revision_x0020_Number"].ToString());
    }

これらはすべて、SharePoint リストに存在する列名ですが、SQL から関数を実行すると、次のエラーが表示されます。

Msg 6260, Level 16, State 1, Line 1
An error occurred while getting new row from user defined Table Valued Function : 
System.ArgumentException: Column 'ows_Line_x0020_Number' does not belong to table row.
System.ArgumentException: 
   at System.Data.DataRow.GetDataColumn(String columnName)
   at System.Data.DataRow.get_Item(String columnName)
   at SharePointToSQL.GetListItemInfo(Object obj, SqlString& SO, SqlString& LineNumber, SqlString& Tags)

しかし、「SO」列と「タグ」列だけを取得しようとすると、このエラーは発生しません。他のすべての列では機能しません。

更新: 「ows_SO」「ows_Sample」などの列を返すことができるが、「ows_Line_x0020_Number」のような列は返せないことがわかりました。列名を少し変更することで、やりたいことができます。しかし、「ows_Line_x0020_Number」のような列名を使用できない理由を誰か教えてもらえますか??

4

1 に答える 1

1

このxNNNN表記は、SharePoint で一部のシンボルをエンコードするために使用されます。0020は Unicode 空間の HEX なので、次を使用してみてください。

r["ows_Line Number"]

それ以外の

r["ows_Line_x0020_Number"]

_x0020_つまり、everyを(スペース)に置き換えて、それが役立つかどうかを確認します。

それでも問題が解決しない場合は、デバッガーを停止して、テーブルの行に実際にどのような列があるかを確認してください。私はまだそれがいくつかの行名の変換の問題だと思っています。Table行名を取得するには、最初に のプロパティを使用して shema を取得できます。DataRow次に、Columnsすべての列名を取得するプロパティです。

于 2012-12-11T07:47:40.050 に答える