Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# npgsql命令中的参数未正确替换_C#_.net_Npgsql - Fatal编程技术网

C# 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

我试图替换字符串中的参数,以便在Npgsql查询中执行

问题是,当它用字符串中的值替换参数时,会添加不必要的括号,因此查询返回错误

NAME_SCHEMA_DB和NAME_ADMIN_DB是字符串常量和 ExecuteCommand只接受一个npgsql命令并执行它

这是我的代码:

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对其问题的回答时,该用户有义务接受该回答。看规则。