我试图替换字符串中的参数以在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);
这是它在到达ExecuteCommand(commandDrop)
DROP SCHEMA IF EXISTS((' test_schemaName'))CASCADE;
我不确定为什么会添加额外的括号和单引号。通常,我希望它运行的查询是
DROP SCHEMA IF EXISTS test_schemaName CASCADE;
答案 0 :(得分:4)
SQL参数通常仅对值有效(例如字段的值) - 不是字段名称和表名等。虽然它很烦人,但您可能需要将这些名称直接嵌入到SQL中。
你应该非常小心这样做 - 当然 - 在可能来自用户输入的任何地方,你应该使用某种形式的白名单。