nom*_*mad 5 sql-server asp.net-mvc dapper
我正在使用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端,而在.NET端decimal?.正在检索的数据是0.00.
我检查了这个答案:Dapper,十进制加倍?解析列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 特有的,因为我刚刚验证了下面的代码片段按预期工作。
尝试显式枚举列名(而不是 select *),以便过程准确返回应映射到的内容PaymentTransactions。是否可能存在另一个名称错误的非十进制列?
这是在 .Net45 上使用 Dapper v1.13:
程序:
create procedure dbo.Test
as
select [SubTotal] = cast('0.01' as decimal(18,2))
union all
select null;
Run Code Online (Sandbox Code Playgroud)
林克垫:
void Main()
{
using (IDbConnection cnn = GetOpenConnection())
{
var users = cnn.Query<Sale>("yak.dbo.test", new { }, commandType: CommandType.StoredProcedure);
users.Dump();
}
}
public static readonly string connectionString = "Data Source=.;Initial Catalog=tempdb;Integrated Security=True";
public static IDbConnection GetOpenConnection()
{
var connection = new SqlConnection(connectionString);
connection.Open();
return connection;
}
public class Sale
{
public decimal? SubTotal;
}
Run Code Online (Sandbox Code Playgroud)
返回:

| 归档时间: |
|
| 查看次数: |
4140 次 |
| 最近记录: |