我正在尝试替换字符串中的参数以在 Npgsql 查询中执行。
问题是,当它用字符串中的值替换参数时,它会添加不必要的括号,因此查询会返回错误。
NAME_SCHEMA_DB和NAME_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;
SQL 参数通常仅对值(例如字段的值)有效,而不对字段名称和表名称等有效。虽然这很烦人,但您可能需要将这些名称直接嵌入到 SQL 中。
当然,您应该非常小心地这样做 - 在任何可能来自用户输入的地方,您都应该使用某种形式的白名单。
| 归档时间: |
|
| 查看次数: |
967 次 |
| 最近记录: |