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

时间:2016-01-24 15:31:43

标签: c# sql sql-server

我有以下查询有效。

string sqlCommandText = "SELECT * FROM Admin_T where AdminID =
'" +  textBox.Text + "'";

这是一个修复命令,我无法在运行时将其与用户指定的表名和列名一起使用。

我实际上要做的是像

这样的命令
string sqlCommandText = "SELECT * FROM Admin_T where 
'" + UserGivenColumnName + "' = '" + conditionTB.Text + "'";

“UserGivenColumnName”可以是属于该特定表的任何列。

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

3 个答案:

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