我有以下查询有效。
string sqlCommandText = "SELECT * FROM Admin_T where AdminID =
'" + textBox.Text + "'";
这是一个修复命令,我无法在运行时将其与用户指定的表名和列名一起使用。
我实际上要做的是像
这样的命令string sqlCommandText = "SELECT * FROM Admin_T where
'" + UserGivenColumnName + "' = '" + conditionTB.Text + "'";
“UserGivenColumnName”可以是属于该特定表的任何列。
尝试创建灵活性,以便在不同情况下使用相同的命令。
答案 0 :(得分:0)
SqlCommand
并且据我所知,ADO.NET使用的相关类都不支持这样的功能。
当然你应该从不使用字符串连接来构建你的SQL查询。您应该始终使用parameterized queries。这种字符串连接对SQL Injection攻击开放。
但是为值而不是列名或表名准备了语句 。如果确实想将输入字符串放入列名,请先创建白名单并将其用作验证,然后再将其放入查询中。
http://codeblog.jonskeet.uk/2014/08/08/the-bobbytables-culture/
答案 1 :(得分:0)
我认为对象关系映射器(ORM)可能是您正在寻找的机器人。 Entity Framework可能是一个很好的起点。
请花时间了解SQL注入是什么,因为其他用户也提示您。
答案 2 :(得分:0)
它没有返回任何东西,因为它只是比较两个字符串
使用' UserGivenColumnName'这是一个字符串比较
那两个字符串不相等
您可以通过不包括'来完成(列) 但这仍然是一个坏主意 SQLinjection是一个非常真实和非常糟糕的事情
string sqlCommandText =
"SELECT * FROM Admin_T where " + UserGivenColumnName + " = '" + conditionTB.Text + "'";
或
string sqlCommandText =
"SELECT * FROM Admin_T where [" + UserGivenColumnName + "] = '" + conditionTB.Text + "'";