【发布时间】:2014-07-19 02:22:39
【问题描述】:
我似乎在 Google(或 StackOverflow)上的任何地方都找不到这个问题,这真的让我感到惊讶,所以我把它放在这里是为了帮助处于同样情况的其他人。
我有一个在 Oracle Sql Developer 上运行良好的 SQL 查询,但是当我通过 C# 使用adapter.Fill(table) 运行它以获取结果时,我收到 Specified cast is not valid 错误 (System.InvalidCastException)。
这是 C# 代码的精简版:
var resultsTable = new DataTable();
using (var adapter = new OracleDataAdapter(cmd))
{
var rows = adapter.Fill(resultsTable); // exception thrown here, but sql runs fine on Sql Dev
return resultsTable;
}
这里是 SQL 的简化版本:
SELECT acct_no, market_value/mv_total
FROM myTable
WHERE NVL(market_value, 0) != 0
AND NVL(mv_total, 0) != 0
如果我删除除法子句,它不会出错 - 所以它是特定的。但是,market_value 和mv_total 都是 Number(19,4) 类型,我可以看到 Oracle 适配器需要一个小数,那么发生了什么转换?为什么它在 SqlDev 上有效,而在 C# 中无效?
【问题讨论】:
标签: c# oracle casting datatable decimal