【发布时间】:2014-01-09 19:43:56
【问题描述】:
我正在使用 Dapper 从 StoredProcedure 从 SQL Server 检索数据,但出现错误
Specified cast is not valid.
及详情:
Error parsing column 4 (SubTotal=0.00 - Decimal)
在 SQL Server 端,列 SubTotal 是 decimal(18, 2) NULLABLE,在 .NET 端是 decimal?。正在检索的数据是0.00。
我检查了这个答案:Dapper,decimal to double? Error parsing column X
根据答案,我替换了
il.Emit(OpCodes.Ldtoken, unboxType);
与
il.Emit(OpCodes.Ldtoken, Nullable.GetUnderlyingType(unboxType) ?? unboxType);
在第 2360 行,仍然出现同样的错误。
有人对此有任何想法吗?谢谢。
更新:
我尝试使列不可为空。还尝试将列更改为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。
【问题讨论】:
-
能否请您包含 dapper sql?是否使用存储过程、原始 sql 等
-
我用代码更新了问题。
-
你是如何从 proc 返回 SubTotal 的?
-
我切换到使用
OUTPUT参数从proc 输出每一列,当cols 为NULL 时Dapper 给我Attempting to cast a DBNull to a non nullable type!,尽管列可以为空并且接受类具有可为空的字段。似乎 Dapper 认为 SubTotal 是decimal,尽管它被定义为decimal?。可空的datetime列也是如此。
标签: sql-server asp.net-mvc dapper