在 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"可以是属于该特定表的任何列。

尝试创建灵活性,以便可以在不同情况下使用相同的命令。

在 C# 编程中创建可重用的 SQL 命令

据我所知,

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 + "'";