C# 使用CASE-WHEN在PostgreSql数据库中双重保存为int

C# 使用CASE-WHEN在PostgreSql数据库中双重保存为int,c#,postgresql,C#,Postgresql,我在更新表时遇到问题。数字3,25保存为325。仅当我使用此更新时才会发生这种情况: using(var con = new Npgsql.NpgsqlConnection(constr)) { var UpdCmd = "UPDATE \"Haus\".\"Category\" SET \"Value\" = CASE "+" WHEN \"CategoryID\"=" + 1 + " THEN " + 3.25 + " WHEN \"CategoryID\"=" + 2 + " TH

我在更新表时遇到问题。数字3,25保存为325。仅当我使用此更新时才会发生这种情况:

using(var con = new Npgsql.NpgsqlConnection(constr))
{
 var UpdCmd = "UPDATE \"Haus\".\"Category\" SET \"Value\" = 
 CASE "+" WHEN \"CategoryID\"=" + 1 + " THEN " + 3.25 +
 " WHEN \"CategoryID\"=" + 2 + " THEN " + 2.25 +" END ";

con.Open();

Npgsql.NpgsqlCommand command = new Npgsql.NpgsqlCommand(UpdCmd, con);
command.ExecuteNonQuery();
}
valueCategoryA和valueCategoryB均为double类型。如果我使用简单的更新没有案例,我没有这个问题

编辑
对于查询参数,我也得到了相同的结果。不管我是用3,25还是3.25。如果您不想使用驱动程序的参数传递,那么结果总是325

,您应该,然后至少将其格式化为:

string UpdCmd = String.Format(@"
    UPDATE ""Haus"".""Category""
    SET ""Value"" = CASE ""CategoryID""
        WHEN 1 THEN {0}
        WHEN 2 THEN {1}
        END
    ", valueCategoryA, valueCategoryB);
双引号转义原始(@)字符串中的另一个双引号。在原始字符串中,可以有多行字符串。这和
格式
方法使它更具可读性


如果知道它是一个字符串,为什么要使用
var

停止通过连接字符串来构建查询,并开始使用查询参数。为什么你认为“3,25”是双精度的有效格式?请提供手册相关部分的链接以支持您的想法。我仍然只得到整数。除了这个案子还有别的选择吗?@Georg你的问题不是
案子
。显示设置这些变量的代码。显示变量
UpdCmd
,查看它真正包含的内容。使用调试器进行调试。@Clodaledo即使我直接在UpdCmd中设置了数字,我仍然得到整数。我编辑了我的code@Georg尝试使用
然后使用“+”3.25“+
,即双引号内的数字。