gpt4 book ai didi

c# - NpgsqlCommand 中的参数未正确替换

转载 作者:太空宇宙 更新时间:2023-11-03 21:21:04 26 4
gpt4 key购买 nike

我正在尝试替换字符串中的参数以在 Npgsql 查询中执行。

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

NAME_SCHEMA_DBNAME_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 查询

DROP SCHEMA IF EXISTS (('test_schemaName')) CASCADE;

我不确定为什么要添加额外的括号和单引号。通常,我希望它运行的查询是

DROP SCHEMA IF EXISTS test_schemaName CASCADE;

最佳答案

SQL 参数通常只对有效(例如字段的值)——对字段名和表名等无效。虽然这很烦人,但您可能需要将这些名称直接嵌入到SQL。

当然,您应该非常小心地执行此操作 - 在任何可能来自用户输入的地方,您都应该使用某种形式的白名单。

关于c# - NpgsqlCommand 中的参数未正确替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30670636/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com