2016-01-24 69 views
0

我有以下查询工作。在c#编程中创建可重复使用的SQL命令

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

这是一个修复命令,我不能在用户给定表名和列名在运行时使用它。

什么我其实想说明的是命令状

string sqlCommandText = "SELECT * FROM Admin_T where 
'" + UserGivenColumnName + "' = '" + conditionTB.Text + "'"; 

“UserGivenColumnName”可以是特定表的一部分的任何列。

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

+2

什么阻止你有一个名为'UserGivenColumnName'的字符串引用并为它指定任何值? –

+0

这只是你真正想要做什么的简化版本?因为我在这里没有看到使用两个变量来设置'string'的问题。side-note:当你创建包括用户输入的sql命令时,注意sql注入! –

+0

异常处理正确。没有例外错误。 –

回答

0

SqlCommand并且ADO.NET使用的相关类没有一个支持这样的功能,据我所知。

当然,你应该从来没有建立你的SQL查询字符串连接。你应该总是使用parameterized queries。这种字符串连接对于SQL Injection攻击是开放的。

但是准备好的语句只有用于值,而不是列名或表名。如果你真的想想把你的输入字符串放到你的列名中,创建一个白名单并将它用作验证,然后再将它放入查询中。

http://codeblog.jonskeet.uk/2014/08/08/the-bobbytables-culture/

0

我认为一个对象关系映射(ORM)也许是你正在寻找的机器人。 Entity Framework可能是一个很好的开始。

请花点时间了解SQL注入是什么,因为其他用户也提示您。

0

因为它只是比较两个字符串
随着“UserGivenColumnName”它没有返回任何东西它是一个字符串比较
而这两个字符串不相等

你可以只是做它(列)不包括'
但它仍然是一个坏主意
SQLinjection是一个非常真实和非常糟糕的事情

string sqlCommandText = 
"SELECT * FROM Admin_T where " + UserGivenColumnName + " = '" + conditionTB.Text + "'"; 

string sqlCommandText = 
"SELECT * FROM Admin_T where [" + UserGivenColumnName + "] = '" + conditionTB.Text + "'";