NpgsqlCommand 中的参数未正确替换
Parameters not replacing properly in NpgsqlCommand
我正在尝试替换字符串中的参数以在 Npgsql 查询中执行。
问题是,当它用字符串中的值替换参数时,它添加了不必要的括号,因此查询 returns 出错。
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);
这是 SQL 在达到 ExecuteCommand(commandDrop)
时尝试 运行 的查询
DROP SCHEMA IF EXISTS (('test_schemaName')) CASCADE;
我不确定为什么要添加额外的括号和单引号。通常,我希望 运行s 的查询是
DROP SCHEMA IF EXISTS test_schemaName CASCADE;
SQL 参数通常仅对 values 有效(例如字段的值)——字段名称和 table 名称等无效。虽然这很烦人,您可能需要将这些名称直接嵌入到 SQL.
你应该 非常 小心,当然 - 在它 可能 来自用户输入的任何地方,你都应该使用白名单某种形式。
我正在尝试替换字符串中的参数以在 Npgsql 查询中执行。
问题是,当它用字符串中的值替换参数时,它添加了不必要的括号,因此查询 returns 出错。
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);
这是 SQL 在达到 ExecuteCommand(commandDrop)
DROP SCHEMA IF EXISTS (('test_schemaName')) CASCADE;
我不确定为什么要添加额外的括号和单引号。通常,我希望 运行s 的查询是
DROP SCHEMA IF EXISTS test_schemaName CASCADE;
SQL 参数通常仅对 values 有效(例如字段的值)——字段名称和 table 名称等无效。虽然这很烦人,您可能需要将这些名称直接嵌入到 SQL.
你应该 非常 小心,当然 - 在它 可能 来自用户输入的任何地方,你都应该使用白名单某种形式。