【问题标题】:SQL CLR function errorSQL CLR 函数错误
【发布时间】:2012-12-12 10:09:00
【问题描述】:

我创建了一个 SQL CLR 函数来从 SharePoint 网站检索数据。 这是返回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”这样的列名??

【问题讨论】:

  • 显然您的obj 缺少此字段或您的字段名称错误
  • 并检查这些值是否不为空...

标签: c# sharepoint sqlclr


【解决方案1】:

SharePoint 使用xNNNN 表示法对一些符号进行编码。 0020 是 Unicode 空间的 HEX,所以尝试使用:

r["ows_Line Number"]

而不是

r["ows_Line_x0020_Number"]

即用(空格)替换每个_x0020_,看看是否有帮助。

如果这不起作用,请尝试在调试器中停止并查看表行中的实际列。我仍然认为这只是一些行名转换的问题。要获取行名,您可以先使用DataRowTable 属性获取shema,然后使用Columns 属性获取所有列名。

【讨论】:

  • 谢谢!这是列名更改的问题。有些列有一个空格,有些列最后是 0,而另一些则缩短了。
猜你喜欢
  • 2013-05-25
  • 2011-05-17
  • 1970-01-01
  • 2023-03-04
  • 2019-04-05
  • 2011-06-24
  • 1970-01-01
  • 1970-01-01
  • 2014-01-27
相关资源
最近更新 更多