如果我从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;
我试过的三个陈述都失败了。他们正在工作,但我不知道发生了什么变化......突然间,我现在得到了这些错误......
任何想法为什么?
答案 0 :(得分:3)
一旦我拨打ToList()
,结果就有效了;我在某处读到,当阅读器仍处于打开状态时,输出参数不会返回输出值,这必然是这种情况。
答案 1 :(得分:0)
@@ TotalCount 中的两个 符号 - 是否阻止您继续?
或最后的假设:
var results = ctx.Query<X>("exec [dbo].[SelectByRecipient] @0, @1, @2, @3 = @TotalCount output", var0, var1, var2, total);