我在一个非常简单的应用程序中使用SqlDataSource.我允许用户通过TextBoxes为SDS的select命令设置几个搜索参数,每个参数一个TextBox(想想txtFirstName,txtLastName等).我打算使用按钮单击事件处理程序来设置SqlDataSo...
我在一个非常简单的应用程序中使用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
本文标题为:c# – SqlDataSource中的动态WHERE子句
基础教程推荐
- 如何使用mshtml从c#windows app以编程方式在网页中写入文件类型的输入字段? 2023-09-18
- unity实现录音并保存本地 2023-02-16
- C#判断语句的表达式树实现 2023-05-16
- WPF实现绘制3D图形的示例代码 2023-07-18
- C#实现单例模式的6种方法小结 2023-07-04
- C#中的委托详解 2023-05-30
- 深入浅析Restful接口的两种使用方式 2022-12-31
- C#中RSA加密与解密的实例详解 2023-01-27
- C#实现冒泡排序和插入排序算法 2023-05-31
- C#语言中字符类char的使用方法(总结) 2022-11-06