我使用OdbcDataReader
連接到Oracle數據庫。在那裏我有一個表格,其字段被聲明爲NUMBER(8,2)。我插入了一行值爲'8.23'的行。它在SqlDeveloper中使用SELECT * FROM <table>
時正確顯示。連接到Oracle數據源時小數點被OdbcDataReader剝離
但是,當使用OdbcDataReader.GetDecimal()從.NET通過ODBC訪問此字段時,我得到一個包含'823'的Decimal
。爲什麼是這樣,我如何得到正確的價值?
編輯:
如果我改用OracleConnection
/OracleCommand
一切正常。
事實也證明,如果我在我的ODBC驅動程序配置中將「使用Oracle NLS設置」中的「數值設置」更改爲「使用美國設置」,小數點也會正確返回。這裏究竟發生了什麼?
基本上我用下面的代碼:
using (OdbcCommand command = new OdbcCommand("SELECT * FROM TEST", connection))
{
using (DbDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine(reader.GetValue(0));
}
}
}
這個打印:
823
823
但在Oracle SQL Developer中恢復運行SELECT * FROM TEST
:
FLDNUM82
----------
8.23
8.23
和運行desc TEST
回報:
Name Null Type
-------- ---- -----------
FLDNUM82 NUMBER(8,2)
'reader.GetString(0 )拋出一個異常,因爲這個值的類型是「Decimal」而不是「String」。此外,我實際上並不知道字段的類型,所以我需要使用'GetValue'。 – DeCaf
你可以使用GetVaue.ToString嗎? – CloudyMarble
是的,並返回'823',即沒有小數點。 (更新了一些更詳細的問題) – DeCaf