我正在使用Dapper从StoredProcedure检索SQL Server中的数据,但出现错误
指定的转换无效。
错误详细信息:
解析列4时出错(SubTotal=0.00 - Decimal)
在SQL Server端,列SubTotal
是decimal(18, 2) NULLABLE
,在.NET端则是decimal?
。检索到的数据为0.00
。
我查看了这个答案:Dapper,decimal to double? Error parsing column X
根据答案,我替换了第2360行的
il.Emit(OpCodes.Ldtoken, unboxType);
为
il.Emit(OpCodes.Ldtoken, Nullable.GetUnderlyingType(unboxType) ?? unboxType);
但仍然出现相同的错误。
有人对此有任何想法吗?谢谢。
更新:
我尝试将列设置为非空。还尝试将列更改为float
(在SQL Server上)和double
(在.NET端)。但是这些都没有起作用,我一直收到同样的错误。然后我将列更改为int
,现在代码可以正常工作。但是,我正在处理货币价值,并希望使用浮点数。将进一步调查...我执行以下存储过程:
var transaction = this.db.Query<PaymentTransactions>("usp_PaymentTransactionsGetSingleIfPaid", new { registrationId }, commandType: CommandType.StoredProcedure);
返回信息的存储过程如下:
SELECT * FROM PaymentTransactions WHERE RegistrationId = @registrationId AND TransactionStatus = 'SUCCESS';
更新2:
Dapper正常工作。也许我的开发环境有问题。只需要重新启动VS即可。
OUTPUT
参数从存储过程中输出每一列,但当列为NULL时,Dapper会报错Attempting to cast a DBNull to a non nullable type!
,尽管这些列是可空的,并且接受类具有可空字段。看起来Dapper认为SubTotal是decimal
类型,尽管它被定义为decimal?
。对于可空的datetime
列也是如此。 - sakura-bloom