【发布时间】:2015-12-27 16:09:59
【问题描述】:
var param = new DynamicParameters();
param.Add("MsgId", DbType.Int32, direction: ParameterDirection.Output);
connection.Execute(MessageSelOutMessageId, param, commandType: CommandType.StoredProcedure);
count = param.Get<int>("MsgId");
通过引用 Dapper,我使用上面的代码调用带有输出参数 - MsgId 的存储过程。它工作正常,但在某些情况下,存储过程不会返回任何值,并且返回的输出参数值将为空。在这些情况下,我得到了这个例外:
试图将 DBNull 转换为不可为空的类型!请注意,在数据流完成之前(在 Query(..., buffered: false 的 'foreach' 之后,或在为 QueryMultiple 释放 GridReader 之后),out/return 参数不会有更新的值)
我知道我们可以使用下面的代码将返回数据类型标记为可空以避免此错误
count = param.Get<int?>("MsgId");
但是,有没有其他方法可以检查 param.Get("MsgId") == null 而不是使用可为空的数据类型 - int?
【问题讨论】:
-
可能是
param.Get<dynamic>("MsgId") == null? -
能不能试试用DBNull.Value代替null,这两个不一样
标签: c# sql-server dapper