我在谷歌(或StackOverflow)里找不到这个问题,这让我很惊讶。所以我把它放在这里来帮助其他遇到同样问题的人。
我有一个SQL查询,在Oracle Sql Developer上运行良好,但是当我通过adapter.Fill(table)
在C#
中运行时,我会得到指定的强制转换无效
错误(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
如果我移除了division语句,它就没有错误——因此它是特定于那个语句。但是,market_value
和mv_total
都是Number(19,4)类型,我可以看到Oracle适配器期望一个小数,那么进行了什么转换?为什么在SqlDev上有效而在C#中无效?