2010-05-11 28 views
0

當我從C#中的SQLite數據庫中獲取任何雙精度值時,我總是收到一個InvalidCastException異常。例外說「指定的演員無效」。C# - 從sqlite中獲取雙精度時出現InvalidCastException

我能夠看到SQL管理器中的值,所以我知道它存在。可以從數據庫中獲取字符串(VARCHARS)和整數。我也可以將該值作爲對象獲取,但當它假設爲「66,8558604947586」(緯度座標)時,我會得到「66.0」。

任何人都知道如何解決這個問題?

我的代碼:

using System.Data.SQLite; 

... 

SQLiteConnection conn = new SQLiteConnection(@"Data Source=C:\\database.sqlite; Version=3;"); 
conn.Open(); 
SQLiteDataReader reader = getReader(conn, "SELECT * FROM table"); 

//These are working 
String name = reader.GetString(1); 
Int32 value = reader.GetInt32(2); 

//This is not working 
Double latitude = reader.getDouble(3); 

//This gives me wrong value 
Object o = reader[3]; //or reader["latitude"] or reader.getValue(3) 
+0

reader.GetFieldType(3)返回什麼? – 2010-05-11 16:22:57

+0

它返回了一個System.Double – Irro 2010-05-11 16:34:17

+1

我的猜測是異常來自GetDouble方法。我沒有該SQLite庫,但是,無法檢查它。你可以做一個'Double.Parse(reader.GetString(3));' – 2010-05-11 16:44:19

回答

0

你可能要檢查你用來存儲在數據庫中的值的數據類型。看起來你可能正在存儲一個整數,但試圖把它作爲一個雙精度來檢索它。

+0

它存儲爲雙精度值,SQLite Manager可以獲取整個值。 – Irro 2010-05-11 16:18:41

0

是否將實際表模式定義爲使用DOUBLE?由於數據庫引擎是無類型的,因此SQLite將執行some translation。如果它實際上是一個SQL DOUBLE列,那麼也可以嘗試進行強制轉換。

More information on SQLite type affinity.

+0

我按照雅各布的建議嘗試了一個「reader.GetFieldType(3)」,並且它返回它被定義爲Double。 你是什麼意思「嘗試演員」? – Irro 2010-05-11 16:36:13

+0

我的意思是添加一個SQL轉換爲double,只是爲了確保它是正確的類型。但是,如果GetFieldType返回double,那麼SQL轉換將無濟於事。 – 2010-05-11 22:14:33