1

如果我从 SQL Server 执行此操作,我会毫无问题地得到输出参数:

exec [dbo].[SelectByRecipient] @0, @1, @2, @TotalCount = @3 output

输出参数返回 18。但是,如果我从 PetaPoco 执行此操作,则输出参数返回 null。我尝试了这些组合:

var total = new SqlParameter("TotalCount", System.Data.SqlDbType.Int);
total.Direction = System.Data.ParameterDirection.Output;

var results = ctx.Query<X>("exec [dbo].[SelectByRecipient] @0, @1, @2, @TotalCount = @3 output", var0, var1, var2, total);
//var results = ctx.Query<X>("exec [dbo].[SelectByRecipient] @0, @1, @2, @@TotalCount = @3 output", var0, var1, var2, total);
//var results = ctx.Query<X>("exec [dbo].[SelectByRecipient] @0, @1, @2, @3 output", var0, var1, var2, total);
//var results = ctx.Query<X>("exec [dbo].[SelectByRecipient] @0, @1, @2, @3 out", var0, var1, var2, total);

//Blows up because total.Value is null
var totalCount = (int)total.Value;

我尝试的三个语句都失败了。他们正在工作,但我不知道发生了什么变化......突然之间,我现在得到这些错误......

任何想法为什么?

4

2 回答 2

3

一旦我打电话,结果就奏效了ToList();我在某处读到,当阅读器仍处于打开状态时,输出参数不会返回输出值,必须如此。

于 2012-01-18T03:00:09.363 回答
0

@@TotalCount中的两个at符号- 这不是阻止您继续吗?

或最后一个假设:

var results = ctx.Query<X>("exec [dbo].[SelectByRecipient] @0, @1, @2, @3 = @TotalCount output", var0, var1, var2, total);
于 2012-01-17T10:44:05.637 回答