如何在NPGSQL中提供查询的表名作为命令参数?[英] How can I provide the table name for a query as command parameter in Npgsql?

本文是小编为大家收集整理的关于如何在NPGSQL中提供查询的表名作为命令参数?的处理方法,想解了如何在NPGSQL中提供查询的表名作为命令参数?的问题怎么解决?如何在NPGSQL中提供查询的表名作为命令参数?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我想提供查询的表名为命令参数,例如:

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,这不是安全问题(甚至是成为一个安全问题).

但是,如果您确实从用户输入中构造了表名,则需要非常小心.但是通常,如果您需要从用户输入中构造表名,则首先在数据库中设计了一些问题,应修复(是的,当然有例外).

本文地址:https://www.itbaoku.cn/post/1763973.html