2012-12-10 3 views
1

SharePoint 사이트에서 데이터를 검색하기 위해 SQL CLR 함수를 만들었습니다. 이 SQL에 반환 일부입니다SQL CLR 함수 오류

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'와 'Tags'컬럼을 얻으 려한다면이 에러를 얻지 못한다.

UPDATE : 나는 "ows_SO" "ows_Sample"등하지만 같은 열 "ows_Line_x0020_Number"와 같은 열을 반환 할 수 있어요 것을 발견 . 열 이름을 조금 변경하여 원하는대로 할 수 있습니다. 하지만 누구나 "ows_Line_x0020_Number"와 같은 열 이름을 사용할 수없는 이유는 무엇입니까?

+0

분명히'obj'가이 필드를 잃어 버렸거나 필드 이름이 잘못되었습니다 – Boomer

+0

그리고이 값이 null이 아닌지 확인하십시오 ... – Boomer

답변

1

xNNNN 표기법은 SharePoint에서 일부 기호를 인코딩하는 데 사용됩니다.

r["ows_Line Number"]

대신 (공간)와 _x0020_ 모든 대체

r["ows_Line_x0020_Number"]

의를하고 도움이되는지 참조 : 0020 유니 코드 공간을위한 HEX, 그래서 사용하려고합니다.

그래도 작동하지 않으면 디버거에서 멈추고 실제 열이 테이블 행에 있는지 확인하십시오. 나는 아직도 행 이름 변환의 문제라고 생각한다. 행 이름을 얻으려면 먼저 Table 속성을 사용하여 DataRow이라는 속성을 얻은 다음 Columns 속성을 사용하여 모든 열 이름을 가져올 수 있습니다.

+0

나는 그 일을하고 있지만 일하지 않았습니다. – user1648225

+0

답변을 업데이트했습니다. 확인해보세요. –

+0

감사합니다! 열 이름이 변경되면 문제가 발생했습니다. 일부 열에는 공백이 있습니다. 일부 열은 끝에 0 개가 있고 다른 열은 짧게 잘라집니다. – user1648225