使用多种数据库(一)Access问题
2005-08-18 15:39
351 查看
这个是ado
oledb驱动的老问题了,传入参数必须按sql中参数出现的顺序,sql不会有这样的问题。不过在ado.net下面,除了sqlserver就都难以
避免了,不过好在,一般使用框架时如果sql是由程序动态构造的一般不会出现参数顺序不一致,我原来被这个问题折腾也是在测试用例中:)当时查了一下才发
现真的是一个很早就广为流传的问题了,并且不是bug,而是因为oledb支持通用的db,但有很多db本身识别参数的时候不按名称只按顺序的,所以也是
没办法的。
其实还有另一个问题:
在sqlserver中:select * from table where param1 = @p1 and param2 = @p2 and param3 = @p1
@p1=1
@p2=2
是完全没问题的
但是如果对oledb驱动就不行了,必须以三个参数对待,同样是因为oledb只按参数索引顺序,不按名称来为参数赋值。
谈到sql语法差异,我再说两点access和sqlserver中的不同,希望对你所有帮助:
一个是access不支持select top 0 from
table这样的语句,注意top后面的数字不能是0,如果大于0没问题,但是sqlserver下是没问题的。发现这个问题是在我的一个基于代码生成的
框架中自动通过形如select columns from table这样的简单语句为每个实体类生成形如select top {0} ...
where not in (select top {1}...)...这样的通用分页查询语句,当区第一页数据的时候,not in 后面的top
{1}中,{1}将会是0,这时access就会报错,所以最后对取第一页的情况我只能区别对待。
再一个是像select * from (select * from
table)这样的语法,在access下没问题,在sqlserver下则必须在后面为动态表指定一个别名语法才是正确的:select *
from (select * from table)
aliasname,aliasname可以是任意的单词。之所以使用这样的语句同样是为了通过形如select columns from
table这样的简单语句构造分页语句时用来返回所有的记录总数:select count(ID) from (select columns
from table),当然这样是偷懒,性能上应该会有部分影响的,count的时候尽可能还是建议直接用select count(ID)
from table这样的句法。
oledb驱动的老问题了,传入参数必须按sql中参数出现的顺序,sql不会有这样的问题。不过在ado.net下面,除了sqlserver就都难以
避免了,不过好在,一般使用框架时如果sql是由程序动态构造的一般不会出现参数顺序不一致,我原来被这个问题折腾也是在测试用例中:)当时查了一下才发
现真的是一个很早就广为流传的问题了,并且不是bug,而是因为oledb支持通用的db,但有很多db本身识别参数的时候不按名称只按顺序的,所以也是
没办法的。
其实还有另一个问题:
在sqlserver中:select * from table where param1 = @p1 and param2 = @p2 and param3 = @p1
@p1=1
@p2=2
是完全没问题的
但是如果对oledb驱动就不行了,必须以三个参数对待,同样是因为oledb只按参数索引顺序,不按名称来为参数赋值。
谈到sql语法差异,我再说两点access和sqlserver中的不同,希望对你所有帮助:
一个是access不支持select top 0 from
table这样的语句,注意top后面的数字不能是0,如果大于0没问题,但是sqlserver下是没问题的。发现这个问题是在我的一个基于代码生成的
框架中自动通过形如select columns from table这样的简单语句为每个实体类生成形如select top {0} ...
where not in (select top {1}...)...这样的通用分页查询语句,当区第一页数据的时候,not in 后面的top
{1}中,{1}将会是0,这时access就会报错,所以最后对取第一页的情况我只能区别对待。
再一个是像select * from (select * from
table)这样的语法,在access下没问题,在sqlserver下则必须在后面为动态表指定一个别名语法才是正确的:select *
from (select * from table)
aliasname,aliasname可以是任意的单词。之所以使用这样的语句同样是为了通过形如select columns from
table这样的简单语句构造分页语句时用来返回所有的记录总数:select count(ID) from (select columns
from table),当然这样是偷懒,性能上应该会有部分影响的,count的时候尽可能还是建议直接用select count(ID)
from table这样的句法。
相关文章推荐
- 今天在使用C#的ASP.NET给Access的数据库中添加新记录发现的问题
- 关于C#中用access做数据库,使用like语句的问题
- 使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
- 关于C#中用access做数据库,使用like语句的问题(转)
- 使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
- 关于C#中用access做数据库,使用like语句的问题
- Hibernate中使用annotatation映射对象和数据库表包的导入问题
- 使用wamp环境进行数据库编程一定要注意端口问题~
- oracle 9i使用闪回查询恢复数据库误删问题
- [SharePoint2007]使用自定义数据库的几个问题
- 使用C#来手动连接 Access 2007数据库
- 查看同一台机器安装sql2000和sql2005,时打开sql查询分析器,查看当前的数据库引擎。并且如何使用sql2005引擎的问题。
- PHP使用数据库的并发问题(转)
- 使用Source Safe for SQL Server解决数据库版本管理问题
- MFC使用ADO连接数据库的问题:error C2059: 语法错误 : “<L_TYPE_raw>”
- PHP使用数据库的并发问题
- ASP.NET之数据库设计与SQL语句(旗舰版2)(使用ACCESS自动生成SQL语句,强大!)
- [Access-Control-Allow-Origin]Web中使用filter实现跨域访问问题
- 数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置……