如何将float插入到右侧语言环境中的SQL表中

Ign*_*cia 3 .net sql-server floating-point localization

我必须将浮点值插入到不同的SQL Server中.每个人都可以有不同的语言环境,所以在一个语境中,表示可以是"42,2"而另一个是"42.2"或其他.我应该如何构建查询,以便它可以在任何SQL Server中工作?

在构造查询之前,我需要检测服务器的语言环境吗?

ang*_*son 7

除非您传递基本常量文字(即每次为列编号0和1),否则您应该使用参数化查询.

为此,您需要在SQL语句中指定"此处我不写入值,但我将在SQL语句旁边提供此参数的值".

以下是在.NET中如何做到这一点:

using (SqlCommand cmd = conn.CreateCommand())
{
    cmd.CommandText = "INSERT INTO tablename (column) VALUES (@value)";
    cmd.Parameters.Add("@value", 42.2);                         ^
    cmd.ExecuteNonQuery(); ^                                    |
}                          |                                    |
                           +-- these have to match up ----------+
Run Code Online (Sandbox Code Playgroud)

在这里你可以看到我根本没有对值进行任何格式化,我将它作为普通的C#文字值提供.我当然也可以从变量中添加它,而无需将其重新格式化为文本.

应该以这种方式传递值,或者你必须处理各种格式问题,如果你从用户那里获取值,你也可以设置自己的SQL注入攻击,这很糟糕!