Ron*_*rby 4 .net sql sql-server dapper
我正在使用Dapper dot net来执行返回4个结果集的存储过程.我是这样做的:
public Results Search(Query query)
{
if (query == null) throw new ArgumentNullException("query");
Results results;
var q = _sqlConnection.QueryMultiple("MySchema.MySproc", query,
commandType: CommandType.StoredProcedure);
{
results = q.Read<Results>().First();
results.CheckAlertResults = q.Read<Results.CheckAlertResult>().ToArray(); // Cannot access a disposed object.Object name: 'GridReader'.
results.PersonAlertResultRows = q.Read<Results.PersonAlertResultRow>().ToArray();
results.RoutingAlertResults = q.Read<Results.RoutingAlertResult>().ToArray();
}
return results;
}
Run Code Online (Sandbox Code Playgroud)
第一个结果集只包含1行.它对应于我Results班上的几个原始属性.
其他3个结果集将包含许多行,并将在Results类上填充3个复杂的数组属性.
出于某种原因,我得到了
无法访问已处置的对象.对象名称:'GridReader'.
检查我的代码,看看在哪里.
我已经验证了从使用Linq2Sql的LinqPad调用时该过程正常工作.
我究竟做错了什么?
当读者无法找到更多结果网格时,读者将自行处理; 基本上,你的C#代码看起来很好,但建议你的proc只返回1格.以下工作正常,例如:
using (var reader = connection.QueryMultiple(
"select 1; select 2 where 1 = 0; select 3 where 1 = 0; select 4;"))
{
var one = reader.Read<int>().ToArray();
var two = reader.Read<int>().ToArray();
var three = reader.Read<int>().ToArray();
var four = reader.Read<int>().ToArray();
try { // only returned four grids; expect a fifth read to fail
reader.Read<int>();
throw new InvalidOperationException("this should not have worked!");
}
catch (ObjectDisposedException) {/* expected; success */}
one.Length.IsEqualTo(1);
one[0].IsEqualTo(1);
two.Length.IsEqualTo(0);
three.Length.IsEqualTo(0);
four.Length.IsEqualTo(1);
four[0].IsEqualTo(4);
}
Run Code Online (Sandbox Code Playgroud)
我可能会尝试改进错误消息,但我怀疑错误是在您的SP中.
| 归档时间: |
|
| 查看次数: |
2830 次 |
| 最近记录: |