2010-07-21 61 views
3

我有這樣的事情:插入一個浮點值與在逗號(,)是用於「浮點」培養

foo { a = 1, b = 2, c = 98,3 } 

我動態地生成所述插入查詢,以便與此結束:

insert foos(a,b,c) (1, 2, 98,3) 

有人知道如何解決這個問題嗎?

+0

奇怪:打開'{'和關閉'''''。在結果聲明中也有太多',':-)。你能澄清嗎? – 2010-07-21 07:00:19

+0

對不起,修正了這個問題 – Omu 2010-07-21 07:01:16

+0

直接提問:是你輸入的JSON? – 2010-07-21 07:02:39

回答

6

簡單的答案:不要使用文本插入值的第一個地方。使用參數化的SQL查詢。

這不僅限於數字 - 它也是日期和時間特別重要。從概念上講,你不是在處理一個「有逗號的號碼」 - 你正在處理一個號碼。 SQL恰好是我們在數據庫和客戶端之間傳輸數據的方式,但參數化的SQL允許我們保留值爲的值,而不會出現毫無意義且容易出錯的轉換爲中間的文本。最後,參數化查詢對於傳輸文本值時防範SQL注入攻擊非常重要。

基本上,分離出「值」(進入參數)和「SQL代碼」的概念,它保留在文本中。

只是重新格式化包含值的現有SQL,直到它正常工作爲止是一個脆弱的解決方案。

+1

喬恩的回答比第一眼看到的omu有更多的價值。 – Tobiasopdenbrouw 2010-07-21 07:05:00

+0

你的意思是這樣的:command.Parameters.AddWithValue(「@ c」,foo.c)? – Omu 2010-07-21 07:05:58

+1

@Omu:很可能,當然已經適當調整了SQL語句。 – 2010-07-21 07:06:25

0

你能不能把價值轉化爲帶'。'的東西?

編輯:使用參數化查詢會更好。一個簡單的'替換'也會有幫助。

+0

值是十進制的第一個地方,在我把她放到字符串後,你的意思是這樣做d.ToString()。Replace(「,」,「。」)? – Omu 2010-07-21 07:02:49

+0

當然,就是這樣的。 – Tobiasopdenbrouw 2010-07-21 07:03:25

1

生成SQL字符串時,始終使用.ToString(CultureInfo.InvariantCulture)以確保TSQL的小數格式正確。

或者,優先使用參數化查詢,如Jon Skeet上面所述。

+0

謝謝你告訴我,我不知道這種使用tostring – Omu 2010-07-21 11:52:04