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