2013-01-03 48 views
1

我有一個MySQL數據庫的表「Products」。 「Products」中的一列稱爲「Price」並具有數據類型「double」。C#,從MySQL數據庫獲取雙值的問題

我需要從該列檢索值,所以我創建了一個閱讀器等:

MySQLCommand cmd = new MySQLCommand("SELECT Price FROM Products", connection); 
MySQLDataReader reader = cmd.ExecuteReaderEx(); 

if (reader.HasRows == true) 
{ 
    while (reader.Read() == true) 
    { 
    price = reader["Price"]).ToString(); 
    } 
} 

問題是,價格未設置爲預期值。如果數據庫中的值爲「299.95」,則價格設置爲「29995.0」。

任何想法爲什麼會發生這種情況?可以做些什麼來解決它?

+0

題外話Genrally價格意味着'decimal'但似乎你正在維修器材作爲'string' – V4Vendetta

+0

當你在數據庫上查詢時,價值真的是'299.95'? –

回答

0

嘗試

MySQLCommand cmd = new MySQLCommand("SELECT Price FROM Products", connection); 
MySQLDataReader reader = cmd.ExecuteReaderEx(); 

if (reader.HasRows) 
{ 
    while (reader.Read()) 
    { 
    price = double.Parse(reader["Price"]).ToString()); 
    } 
} 

價格變量應該是雙倍數據類型

+0

已經試過這個,它沒有工作。但謝謝你試一試。 – Louisa

+0

什麼是您的CultureInfo?如果你的數據庫記錄是使用美式格式保存的,但是你的機器有西班牙文或其他文化,那麼你的數據庫格式就不一樣了。 –

3

這是因爲的toString()使用當前CultureInfo! 這取決於文化,如果雙逗號或點分隔。

CultureInfo

又見this#1問題!

如果你調試它,你應該看到,reader [「Price」]返回一個Object(type = Object {double})。這裏的數值是否正確?我猜是,所以只要下面顯示的雙重價值:

string display = double.Parse(reader["Price"], CultureInfo.InvariantCulture).ToSring(CultureInfo.CurrentCulture); 
System.Diagnostics.Debug.WriteLine(display); 
+0

聲音合理,但閱讀器[「價格」]返回「29995.0」。所以看起來已經遲到了,試圖讓它明白「。」應該被解釋爲「,」。 – Louisa

+0

但是,如果讀者[「價格」]返回「299.95」,它不會遲到... – Louisa

+0

如果您試圖用雙精度分析它,會發生什麼?雙測試=(雙)讀者[「價格」]這是否工作?如果沒有,我不知道你的問題是什麼... – harry