Eri*_*fer 3 .net c# sql postgresql 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;
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎导致了这个查询:"SELECT * from E'mytable'"导致错误(请注意单引号).
我真的需要为此进行字符串连接吗?从安全角度来看并不重要,因为用户不能更改表名,但创建SQL查询的字符串连接总是让我感到毛骨悚然......
谢谢,埃里克
表名不能作为参数发送.表名在解析时解析,因为它们是计划和这些事情所需要的.参数仅在执行程序(或必要时的优化程序)时替换.
所以,是的,你需要使用字符串替换它.当然,只要表名来自你班级的const,这不是安全问题(甚至是成为一个人的风险).
但是如果你从用户输入构造表名,你需要非常小心.但通常如果你需要从用户输入构造表名,那么首先应该在数据库中设计一些东西并且应该修复(是的,当然有例外).
| 归档时间: |
|
| 查看次数: |
1555 次 |
| 最近记录: |