2012-10-09 102 views
0

我將CLR與SQL Server 2008集成,它已成功配置。但是我在這個SqlProcedure中調用了一個webservice。CLR集成返回結果集

這裏是代碼,我試圖返回XML響應。

[Microsoft.SqlServer.Server.SqlProcedure] 
public static void SendReceiveAsXML(SqlString request) 
{ 
    SqlPipe sp; 
    sp = SqlContext.Pipe; 
    MsgWS obj = new MsgWS(); 
    string s = obj.SendAndReceiveAsXml(request.ToString()); 

    sp.Send(s); 

} 

可能存在「最大長度超過例外」的可能性。爲了防止這種情況,我需要檢索響應作爲閱讀器以及這是我與SQL集成的最終組件的要求。

enter image description here

任何建議都歡迎。

+0

不會例外發生在哪一行?它在'sp.Send(s);'? – LuigiEdlCarno

+0

@LuigiEdlCarno請檢查更新的問題。 – Sujit

回答

3

Pipe.Send(string)用於將消息返回給客戶端。對於如此大的文本,您應該創建一個SqlDataRecord,將其作爲結果集返回給客戶端 - 您可以在其中將其有效返回爲varchar(max)列。


因此,您必須修改方法對這個結尾:

string s = obj.SendAndReceiveAsXml(request.ToString()); 

var md = new SqlMetaData("ColumnA", SqlDbType.VarChar, -1); 
var row = new SqlDataRecord(md); 
row.SetString(0, s); 

sp.Send(row); 
+0

做SqlDataRecord支持多個記錄集?因爲如果我將響應轉換爲數據集,它會返回多個記錄集。任何建議。 – Sujit

+0

@asdasd - 你爲什麼將它轉換爲數據集?如果你已經把它作爲'string',你可以把它作爲一個單獨的列存儲在一行中,只要該列是'varchar(max)'。 –

+0

實際上,這是其他應用程序需要從sql接受輸出爲datatable的需求。 – Sujit