2012-05-09 14 views
1

當我從C#發送十進制值,例如:5.54 當我執行查詢我可以看到我的變量表示爲5,54MySQL是不接受十進制格式正確

人有一個想法如何實現獲得DOT而不是COMMA?

這裏是我的代碼:

using (MySqlConnection conn = new MySqlConnection(conn_string.ToString())) 
       using (MySqlCommand cmd = conn.CreateCommand()) 
       { 
        cmd.CommandText = string.Format("INSERT Test (lat, long) VALUES ({0},{1})", 
                OSGconv.deciLat, OSGconv.deciLon); 
        conn.Open(); 
        cmd.ExecuteNonQuery(); 
       } 

回答

0

我完全與其他建議達成一致。至於關於逗號或點的其他問題,則取決於CurrentCulture。爲了得到正確的格式,你將不得不使用ToString,providing Culture.InvariantCulture as the second parameter。這將使用小數點分隔符的點。

但是,我堅持,對方的回答是非常好的建議:使用DbParameters。我添加:傳遞C#中保存的值,而不是將其轉換爲字符串。它將由ADO.NET提供程序正確處理。即如果你必須通過float變量,也通過它無需轉換爲string,但是,作爲float值。

+0

好的,我確定我會使用參數。但這只是爲了測試。我在哪裏放置文化參數? –

+0

添加鏈接到我的答案。 – JotaBe

3

人有一個想法如何實現讓DOT,而不是逗號?

不要嵌入值到SQL直接下手。改用參數化的SQL。舉例來說,請參閱MySqlCommand.Parameters的文檔。你應該總是使用參數化查詢:

  • 他們分開的數據代碼
  • 他們防止SQL注入攻擊(不是這些數字的問題,但考慮串...)
  • 他們防止轉換問題這樣

這裏有一個更普遍的觀點:比你要不要執行任何更多的轉換。每次將數據從一種表單轉換爲另一種表單時,您都有可能丟失數據或更糟。如果您可以儘可能長時間保持數據的最佳表示形式,則可以將問題降至最低。

+0

你能給我一些例子嗎?你的意思是像存儲過程? –

+0

@denonth:不,我的意思是參數化SQL,在SQL中指定佔位符,然後分別指定*值*。 –

+1

@denonth:我已經添加了一個鏈接到MySQL文檔,它應該可以幫助你。搜索應該給你更多的例子在網絡上。 –