我有这样的事情:
foo { a = 1, b = 2, c = 98,3 }
我动态生成插入查询,最后得到:
insert foos(a,b,c) (1, 2, 98,3)
有谁知道如何解决这个问题?
答案 0 :(得分:6)
简单回答:首先不要使用文本来插入值。使用参数化SQL查询。
这不仅限于数字 - 它对日期和时间也特别重要。从概念上讲,你不是在处理“带逗号的数字” - 你正在处理一个数字。 SQL恰好是我们在数据库和客户端之间传输数据的方式,但参数化SQL允许我们将值保持为值,而不会在其间进行无意义且容易出错的文本转换。最后,参数化查询在传输文本值时非常重要,可以防止SQL注入攻击。
基本上,将“值”(进入参数)和“SQL代码”的概念分开,保留在文本中。
只需重新格式化包含值的现有SQL,直到它发生工作为止,这是一个脆弱的解决方案。
答案 1 :(得分:1)
生成SQL字符串时,始终使用.ToString(CultureInfo.InvariantCulture)
来确保为TSQL正确格式化小数。
或者,首选,使用参数化查询,如上面Jon Skeet所述。
答案 2 :(得分:0)
你能不能只用'。'来表达价值?
编辑:使用参数化查询会更好。而简单的“替换”也会有所帮助。