C# npgsql命令中的参数未正确替换
我试图替换字符串中的参数,以便在Npgsql查询中执行 问题是,当它用字符串中的值替换参数时,会添加不必要的括号,因此查询返回错误 NAME_SCHEMA_DB和NAME_ADMIN_DB是字符串常量和 ExecuteCommand只接受一个npgsql命令并执行它 这是我的代码:C# npgsql命令中的参数未正确替换,c#,.net,npgsql,C#,.net,Npgsql,我试图替换字符串中的参数,以便在Npgsql查询中执行 问题是,当它用字符串中的值替换参数时,会添加不必要的括号,因此查询返回错误 NAME_SCHEMA_DB和NAME_ADMIN_DB是字符串常量和 ExecuteCommand只接受一个npgsql命令并执行它 这是我的代码: String qdropSchema = @"DROP SCHEMA IF EXISTS @name_schem CASCADE"; String qCreateSchema = @"CREATE SCHEMA @n
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);
这就是它到达ExecuteCommandcommandDrop时尝试运行的SQL查询
如果存在“test_schemaName”级联,则删除架构
我不知道为什么会加上额外的括号和单引号。通常,我希望它运行的查询是
如果存在测试\方案名称级联,则删除方案
SQL参数通常只对值有效,例如字段的值,而不是字段名和表名等。虽然这很烦人,但您可能需要将这些名称直接嵌入SQL中
当然,您应该非常小心地这样做-无论它来自用户输入的任何地方,您都应该使用某种形式的白名单。SQL参数通常只对值有效,例如字段值,而不是字段名和表名等。虽然这很烦人,但您可能需要将这些名称直接嵌入SQL
当然,您应该非常小心地这样做-无论它来自用户输入的任何地方,您都应该使用某种形式的白名单。因为它是一个字符串,所以参数系统用引号括起来。参数并不是真正用来指定表或模式的。架构名称是由用户输入的吗?因为它是一个字符串,所以参数系统用引号括起来。参数并不是真正用来指定表或模式的。架构名称是否由用户输入?@chardubs当用户收到Jon Skeet对其问题的回答时,该用户有义务接受该回答。参见规则。@chardubs当用户收到Jon Skeet对其问题的回答时,该用户有义务接受该回答。看规则。