【发布时间】:2015-06-05 15:43:25
【问题描述】:
我正在尝试替换字符串中的参数以在 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) 时尝试运行的 SQL 查询
如果存在则删除模式 (('test_schemaName')) 级联;
我不确定它为什么要添加额外的括号和单引号。通常,我希望它运行的查询是
如果存在则删除模式 test_schemaName CASCADE;
【问题讨论】:
-
因为它是一个字符串,参数系统用引号括起来。参数并不真正意味着指定表或模式。架构名称是用户输入的吗?