当前位置: 首页 > 面试题库 >

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

宗政鸿志
2023-03-14
问题内容

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

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查询的字符串连接总是让我感到毛骨悚然…

谢谢,埃里克


问题答案:

表名不能作为参数发送。表名称在解析时解析,因为计划和此类操作需要它们。仅在执行程序(或优化程序,必要时)时替换参数。

是的,您将需要使用字符串替换。当然,只要表名来自您的类中的const,就不是安全问题(甚至不是成为一个安全问题)。

但是,如果您确实要根据用户输入来构造表名,则需要非常小心。但是通常,如果您需要根据用户输入来构造表名,那么数据库中的某些内容首先会被设计不良,并且应该予以修复(是的,当然还有例外)。



 类似资料:
  • 问题内容: 嗨,我有一个命名查询 我想这样设置限制: 但这在服务器启动时显示错误。我正在使用以下代码在DAO类中调用查询: 需要设置开始和结束参数。请帮忙。 问题答案: 正如@DataNucleus所说,LIMIT在JPQL中不是有效的关键字。这不是指定要返回多少行的方法。这是您的操作方式: 这将是调用命名查询的代码:

  • 这会产生一个错误,即:- 原因:组织。冬眠hql。内部的ast。QuerySyntaxException:意外的令牌::靠近第1行第15列[select c from:entity c]at org。冬眠hql。内部的ast。QuerySyntaxException。convert(QuerySyntaxException.java:91)~[hibernate-core-4.3.11.Final

  • 问题内容: 给出以下HQL查询: 我使用Query对象的方法进行设置。 我想使用对象进行设置,但是在查看Hibernate文档和方法列表时,我看不出要使用哪种明显的选择。有任何想法吗? 问题答案: 使用,的Javadoc在这里。 有四种变体可供选择。

  • 问题内容: 我正在尝试在bigquery的查询中使用命名参数。 我懂了 有什么办法可以在biquery上设置命名参数? 问题答案: BigQuery仅通过使用标准SQL的API而非Web UI支持命名参数。您可以在“运行参数化查询”部分中了解有关它们的信息。如果您对查询参数的Web UI支持感兴趣,可以在问题跟踪器上为功能请求加注星标。

  • 错误:运算符不存在:uuid=bytea 有什么建议吗?

  • 我正在尝试更新数据库表。如果表单中的密码为空,我如何通过提供一个条件来防止表单中的密码(“memberpassword”,$pass)被sql代码更新?有可能吗?