Csharp/C#教程:使用multi.Read,输出参数始终为null分享


使用multi.Read,输出参数始终为null

我们广泛使用Dapper.Net并对它非常满意。 但是,在尝试使用multi.Read从存储过程中检索输出参数时,我们遇到了一个问题:

var p = new DynamicParameters(); p.Add("@id", id); p.Add("TotalRows", dbType: DbType.Int32, direction: ParameterDirection.Output); using (var multi = cnn.QueryMultiple(string.Format("dbo.[{0}]", spName), p, commandType: CommandType.StoredProcedure)) { int TotalRows = p.Get("@TotalRows"); //This is always null var results = multi.Read().ToList(); var areas = multi.Read().ToList(); var categories = multi.Read().ToList(); int TotalRows = multi.Read().FirstOrDefault(); // This works } 

但是,如果我们使用connection.Query语法来获取单个结果集,则会填充输出参数:

 var result = cnn.Query(string.Format("spname"), p, commandType: CommandType.StoredProcedure).ToList(); int TotalRows = p.Get("@TotalRows"); 

错误是Dapper DynamicParameters中输出参数的AttachedParam的sqlValue始终为null。

为了解决这个问题,我们将输出参数的值添加到存储过程的结果集中,并以这种方式读取它。

为什么参数总是为空?

在TDS流中, OUT参数结束 。 在Query示例中,您已经使用了TDS流

 var result = cnn.Query(string.Format("spname"), p, commandType: CommandType.StoredProcedure).ToList(); int TotalRows = p.Get("@TotalRows"); 

因为您已经使用了流,所以已经达到了新的参数值,并且您应该具有可用的值。 在QueryMultiple示例中,您尚未到达TDS流的末尾。 尝试移动p.Get

 var p = new DynamicParameters(); p.Add("@id", id); p.Add("TotalRows", dbType: DbType.Int32, direction: ParameterDirection.Output); using (var multi = cnn.QueryMultiple(string.Format("dbo.[{0}]", spName), p, commandType: CommandType.StoredProcedure)) { var results = multi.Read().ToList(); var areas = multi.Read().ToList(); var categories = multi.Read().ToList(); } int TotalRows = p.Get("@TotalRows"); 

如果不起作用,请告诉我; p

上述就是C#学习教程:使用multi.Read,输出参数始终为null分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/951972.html

(0)
上一篇 2021年11月19日
下一篇 2021年11月19日

精彩推荐