在 C# 编程中创建可重用的 SQL 命令
本文关键字:SQL 命令 编程 创建 | 更新日期: 2023-09-27 18:31:36
我有以下有效的查询。
string sqlCommandText = "SELECT * FROM Admin_T where AdminID =
'" + textBox.Text + "'";
这是一个修复命令,我无法在运行时将其与用户给定的表名和列名一起使用。
我实际上想做的是命令,比如
string sqlCommandText = "SELECT * FROM Admin_T where
'" + UserGivenColumnName + "' = '" + conditionTB.Text + "'";
"UserGivenColumnName"可以是属于该特定表的任何列。
尝试创建灵活性,以便可以在不同情况下使用相同的命令。
SqlCommand
并且 ADO.NET 使用的相关类都不支持这样的功能。
当然,你永远不应该使用字符串串联来构建你的sql查询。应始终使用参数化查询。这种字符串串联对SQL注入攻击是开放的。
但预准备语句仅适用于值,而不用于列名或表名。如果确实要将输入字符串放入列名称中,请创建一个白名单,并在将其放入查询之前将其用作验证。
http://codeblog.jonskeet.uk/2014/08/08/the-bobbytables-culture/
我认为对象关系映射器(ORM)可能是您正在寻找的机器人。实体框架可能是一个很好的起点。
也请花时间了解SQL注入是什么,因为其他用户也提示过你。
它不返回任何内容,因为它只是比较两个字符串
使用"UserGivenColumnName",它是一个字符串比较
而且这两个字符串不相等
您可以通过不包含"
但这仍然是一个坏主意
SQL注入是一件非常真实且非常糟糕的事情
string sqlCommandText =
"SELECT * FROM Admin_T where " + UserGivenColumnName + " = '" + conditionTB.Text + "'";
或
string sqlCommandText =
"SELECT * FROM Admin_T where [" + UserGivenColumnName + "] = '" + conditionTB.Text + "'";