参数在NpgsqlCommand中未正确替换

时间:2015-06-05 15:43:25

标签: c# .net npgsql

我试图替换字符串中的参数以在Npgsql查询中执行。

问题是,当它用字符串中的值替换参数时,它会添加不必要的括号,因此查询会返回错误。

NAME_SCHEMA_DBNAME_ADMIN_DB是字符串常量和 ExecuteCommand只需NpgsqlCommand即可执行。

这是我的代码:

String qdropSchema = @"DROP SCHEMA IF EXISTS @name_schem CASCADE";
String qCreateSchema = @"CREATE SCHEMA @name_schem AUTHORIZATION @name_admin";


DbCommand commandeDrop = new NpgsqlCommand(qdropSchema);
commandDrop.Parameters.Add(new NpgsqlParameter("@name_schem", NAME_SCHEMA_DB));

DbCommand commandCreate = new NpgsqlCommand(qCreateSchema);
commandCreate.Parameters.Add(new NpgsqlParameter("@name_schem", NAME_SCHEMA_DB));
commandCreate.Parameters.Add(new NpgsqlParameter("@name_admin", NAME_ADMIN_DB));


ExecuteCommand(commandDrop);
ExecuteCommand(commandCreate);

这是它在到达ExecuteCommand(commandDrop)

时尝试运行的SQL查询
  

DROP SCHEMA IF EXISTS((' test_schemaName'))CASCADE;

我不确定为什么会添加额外的括号和单引号。通常,我希望它运行的查询是

  

DROP SCHEMA IF EXISTS test_schemaName CASCADE;

1 个答案:

答案 0 :(得分:4)

SQL参数通常仅对有效(例如字段的值) - 不是字段名称和表名等。虽然它很烦人,但您可能需要将这些名称直接嵌入到SQL中。

你应该非常小心这样做 - 当然 - 在可能来自用户输入的任何地方,你应该使用某种形式的白名单。