2012-10-09 101 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