gpt4 book ai didi

c# - 如何在 Npgsql 中为查询提供表名作为命令参数?

转载 作者:行者123 更新时间:2023-11-29 11:42:14 25 4
gpt4 key购买 nike

我想为查询提供表名作为命令参数,如下所示:

public class Foo
{
private const String myTableName = "mytable";

public void Bar()
{
NpgsqlCommand command = new NpgsqlCommand("SELECT * from :tableName", connection);
command.Parameters.Add(new NpgsqlParameter("tableName", DbType.String));
command.Parameters[0].Value = myTableName;
}
}

这似乎导致此查询:"SELECT * from E'mytable'" 导致错误(注意单引号)。

我真的需要为此进行字符串连接吗?从安全的角度来看这无关紧要,因为用户不能更改表名,但是用于创建 SQL 查询的字符串连接总是让我毛骨悚然...

谢谢,埃里克

最佳答案

表名不能作为参数发送。表名在解析时被解析,因为它们需要用于计划和类似的事情。参数仅在执行器(或必要时优化器)时替换。

是的,您将需要对其使用字符串替换。当然,只要表名来自您类(class)中的常量,这就不是安全问题(甚至成为安全问题的风险)。

但是如果您确实根据用户输入构造表名,则需要非常小心。但通常情况下,如果您需要根据用户输入构造表名,那么首先数据库中的某些设计就很糟糕,应该予以修复(是的,当然也有异常(exception))。

关于c# - 如何在 Npgsql 中为查询提供表名作为命令参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1199134/

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