VS2005中TableAdapter中实现动态查询并使用LIKE的方法整理
2008-08-27 17:23
826 查看
1.先说动态查询,目前已知有如下几种方法:
排列组合(最笨的方法)
条件拼接(也很笨)
使用partial class(对新手有一点点难,并且也不够简单,具体实现参见 "How can I get tableadapter to process dynamic sql 'select' queries?" )
在TableAdapter的Fill语句中用SQL实现(比较简单)
经过比较,我认为最后一种方法最简单方便,只须简单的在原来的SQL语句上稍加扩展即可达到目的。
需要声明的是,这种写法是博客园里的edobnet网友提出的。
文章地址为/article/4776191.html
但由于他的文章有很多人回复,比较乱,所以我特意把原文及回复做了一下归纳。
其中比较有特点的SQL写法有:
--博客园网友edobnet的写法
SELECT * FROM table WHERE (addDate = @addDate OR @addDate IS NULL) AND (name = @name OR @name = '')
--博客园网友goodspeed的写法
SELECT * FROM table WHERE (addDate = CASE @addDate IS NULL THEN addDate ELSE @addDate END) AND
(name = CASE @name WHEN '' THEN name ELSE @name END)
--网友Hanjoe的写法
SELECT * FROM table WHERE addDate = ISNULL(@addDate ,addDate) AND name = ISNULL(@name,name)
第三种写法最简洁,但是有缺点——对@name使用ISNULL,只考虑了@name为null的情况却没考虑@name是空字符串(@name='')时的情况。
要知道对于数据库来说空字符串('')和null并不是一回事。(关于null,更详细的介绍请参见《.NET和SQL Server中“空值”辨析 (DBNull与Null的区别)》一文)
总体来看,还是第一种写法相对简洁、完善一些。当然也可以把第一和第三种写法综合,看个人习惯了。
2.使用LIKE
如果LIKE后面的条件包含变量,则直接连写会导致识别错误,如:
LIKE '%@CategoryName%'
可见变量名被当成了文本。
正确的写法是:
LIKE '%' + @CategoryName + '%'
(可参考 “如何設定TableAdapter.FillBy條件使用LIKE” )
3.完整代码举例如下:
SELECT StationID, CompanyName, ContactName, Address, City, PostCode, Phone,
Fax
FROM Stations
WHERE (StationID = @StationID OR @StationID = '') AND
(CompanyName LIKE '%' + @CompanyName + '%' OR @CompanyName='') AND
(ContactName LIKE '%' + @ContactName + '%' OR @ContactName='')
排列组合(最笨的方法)
条件拼接(也很笨)
使用partial class(对新手有一点点难,并且也不够简单,具体实现参见 "How can I get tableadapter to process dynamic sql 'select' queries?" )
在TableAdapter的Fill语句中用SQL实现(比较简单)
经过比较,我认为最后一种方法最简单方便,只须简单的在原来的SQL语句上稍加扩展即可达到目的。
需要声明的是,这种写法是博客园里的edobnet网友提出的。
文章地址为/article/4776191.html
但由于他的文章有很多人回复,比较乱,所以我特意把原文及回复做了一下归纳。
其中比较有特点的SQL写法有:
--博客园网友edobnet的写法
SELECT * FROM table WHERE (addDate = @addDate OR @addDate IS NULL) AND (name = @name OR @name = '')
--博客园网友goodspeed的写法
SELECT * FROM table WHERE (addDate = CASE @addDate IS NULL THEN addDate ELSE @addDate END) AND
(name = CASE @name WHEN '' THEN name ELSE @name END)
--网友Hanjoe的写法
SELECT * FROM table WHERE addDate = ISNULL(@addDate ,addDate) AND name = ISNULL(@name,name)
第三种写法最简洁,但是有缺点——对@name使用ISNULL,只考虑了@name为null的情况却没考虑@name是空字符串(@name='')时的情况。
要知道对于数据库来说空字符串('')和null并不是一回事。(关于null,更详细的介绍请参见《.NET和SQL Server中“空值”辨析 (DBNull与Null的区别)》一文)
总体来看,还是第一种写法相对简洁、完善一些。当然也可以把第一和第三种写法综合,看个人习惯了。
2.使用LIKE
如果LIKE后面的条件包含变量,则直接连写会导致识别错误,如:
LIKE '%@CategoryName%'
可见变量名被当成了文本。
正确的写法是:
LIKE '%' + @CategoryName + '%'
(可参考 “如何設定TableAdapter.FillBy條件使用LIKE” )
3.完整代码举例如下:
SELECT StationID, CompanyName, ContactName, Address, City, PostCode, Phone,
Fax
FROM Stations
WHERE (StationID = @StationID OR @StationID = '') AND
(CompanyName LIKE '%' + @CompanyName + '%' OR @CompanyName='') AND
(ContactName LIKE '%' + @ContactName + '%' OR @ContactName='')
相关文章推荐
- VS2005中TableAdapter中实现动态查询并使用LIKE的方法整理
- SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法
- SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法
- QBC常用限定方法,使用QBC实现动态查询 ,Restrictions
- baseadapter.getItemId的使用方法:实现listview筛选、动态删除
- spring data in方法的使用以及动态条件查询+分页
- SqlParameter 使用 like模糊 查询不到结果的解决方法
- MySQL使用like查询中文不准确的解决方法
- 使用TableAdapter的Update方法使用注意事项
- Thinkphp使用mongodb数据库实现多条件查询方法
- 使用反射让linq实现动态查询, 类似拼接sql语句的where 条件
- struts2.5 使用感叹号和通配符实现动态方法调用无效的问题及解决!
- ajax实现动态从数据库模糊查询显示到下拉框中(ajax方法返回Dataset的例子)
- 使用jquery为table动态添加行的实现代码
- 使用jQuery给Table动态增加行、清空table的方法
- 使用ADO.NET类及方法实现数据库的查询并返回一个Object 数组
- MyBatis中的动态SQL,实现不确定条件的CRUD-----使用Map来传递查询的参数
- 使用反射实现根据名称动态创建窗体的几种方法。
- pro*C 使用动态sql方法四实现数据批量导入导出
- MySQL中使用case when 语句实现多条件查询的方法