您的位置:首页 > 数据库

使用多种数据库(一)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这样的句法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: