我正在使用linq to sql来执行SP,但是为一些SP解决了这个问题。我必须执行两次函数ExecuteMethodCall才能得到结果。第一个调用甚至没有转到SQL Server。我使用SQL Profiler检查SP是否已执行,但我在profiler中得到了这个:
RPC:已完成exec sp_reset_connection
随后对ExecuteMethodCall的调用实际上执行SP并获取数据。
[Function(Name="dbo.Example_SP_To_Get_List")]
[ResultType(typeof(Example_SP_To_Get_List_getResult1))]
[ResultType(typeof(Example_SP_To_Get_List_getResult2))]
public IMultipleResults Example_SP_To_Get_List([Parameter(Name="SEARCH", DbType="VarChar(50)")] string sEARCH, [Parameter(Name="PAGE", DbType="VarChar(1)")] string pAGE, [Parameter(Name="ACTIVEFILTER", DbType="VarChar(4)")] string aCTIVEFILTER)
{
//first invocation, returns nothing, does not even call the SP (SQL Profiler does not show the sp call)
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), sEARCH, pAGE, aCTIVEFILTER);
//second time, it executes the SP and returns the result
result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), sEARCH, pAGE, aCTIVEFILTER);
return ((IMultipleResults)(result.ReturnValue));
}
请帮助我找到为什么这种情况发生在少数SP,而其他人工作正常。
答案 0 :(得分:0)
如果SP返回多个结果集,则调用者函数必须按顺序获取所有结果集。在上面的例子中,SP返回了两个结果集,而我只获取了第二个结果集。 使用以下代码可以解决问题:
var spResults = dbLayer.Example_SP_To_Get_List();
var result1 = spResults.GetResult<Example_SP_To_Get_List_getResult1>().ToList();
var result2 = spResults.GetResult<Example_SP_To_Get_List_getResult2>().ToList();
不确定这是否是最佳方式,但它解决了我的问题。