0

我在更新表格时遇到问题。数字 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 类型。如果我使用没有 CASE 的简单更新,我没有这个问题。

编辑:我也得到与查询参数相同的结果。我使用 3,25 还是 3.25 都没关系。结果总是 325

4

1 回答 1

1

如果您不想使用驱动程序的参数传递,并且应该,那么至少将其格式化为:

string UpdCmd = String.Format(@"
    UPDATE ""Haus"".""Category""
    SET ""Value"" = CASE ""CategoryID""
        WHEN 1 THEN {0}
        WHEN 2 THEN {1}
        END
    ", valueCategoryA, valueCategoryB);

双引号转义原始 (@) 字符串中的另一个双引号。在原始字符串中,您可以有一个多行字符串。那和Format方法使它更具可读性。

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

于 2013-06-20T11:20:56.287 回答