c# – SqlDataSource中的动态WHERE子句

我在一个非常简单的应用程序中使用SqlDataSource.我允许用户通过TextBoxes为SDS的select命令设置几个搜索参数,每个参数一个TextBox(想想txtFirstName,txtLastName等).我打算使用按钮单击事件处理程序来设置SqlDataSource的SelectCommand属性,默认情况下将返回所有记录(出于我的目的).我想改进这个select命令,可能会添加一个或多个WHERE子句,具体取决于用户是否在我的任何TextBox中输入搜索条件.

我不清楚的例子:

默认情况下,我的SqlDataSource的SelectCommand属性将是这样的:

SELECT * FROM MyTable

如果用户在txtFirstName中输入“Bob”,我希望SelectCommand属性如下所示:

SELECT * FROM MyTable WHERE [FirstName]='Bob'

如果用户在txtLastName中输入“Jones”,我希望SelectCommand属性如下所示:

SELECT * FROM MyTable WHERE [FirstName]='Bob' AND [LastName]='Jones'

我的问题:
有没有办法动态创建这些WHERE子句,而我不必测试空TextBox并手工构建WHERE子句?

我的小应用程序只有三个参数,所以粗暴强迫我的方式通过这不会很痛苦,但我想知道是否有更简单的方法来做到这一点加上它可能我将来需要添加更多的参数.另外,我可能想要添加通配符搜索.

解决方法:

正如您所说,构建该查询并不困难,因为您总是在where子句中对字段进行AND运算.

请注意,如果您这样做,请不要格式化字符串.使用SqlParameters来避免SQL注入:http://en.wikipedia.org/wiki/SQL_injection

因此,您可以从WHERE开始,对于每个具有值的文本框,追加[(fieldName)] = @(fieldname)并绑定该sql参数.

见:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.aspx

如果您愿意使用Linq to SQL或实体框架,请参阅此谓词构建器:http://www.albahari.com/nutshell/predicatebuilder.aspx

上一篇:安装React Devtools调试工具


下一篇:0013.MySQL开发规范