Proc不使用PetaPoco返回输出参数值

时间:2012-01-17 10:37:13

标签: .net sql-server stored-procedures ado.net petapoco

如果我从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;

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

任何想法为什么?

2 个答案:

答案 0 :(得分:3)

一旦我拨打ToList(),结果就有效了;我在某处读到,当阅读器仍处于打开状态时,输出参数不会返回输出值,这必然是这种情况。

答案 1 :(得分:0)

@@ TotalCount 中的两个 符号 - 是否阻止您继续?

或最后的假设:

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