NpgsqlCommand 中的参数未正确替换

1 .net c# 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);
Run Code Online (Sandbox Code Playgroud)

这是它在到达时尝试运行的 SQL 查询ExecuteCommand(commandDrop)

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

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

如果存在则删除架构 test_schemaName CASCADE;

Jon*_*eet 5

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

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