NpgsqlCommand 中的参数未正确替换

Parameters not replacing properly in NpgsqlCommand

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

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

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);

这是 SQL 在达到 ExecuteCommand(commandDrop)

时尝试 运行 的查询

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

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

DROP SCHEMA IF EXISTS test_schemaName CASCADE;

SQL 参数通常仅对 values 有效(例如字段的值)——字段名称和 table 名称等无效。虽然这很烦人,您可能需要将这些名称直接嵌入到 SQL.

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