首页 新闻 会员 周边

Access日期字段参数化查询的怪问题!

0
悬赏园豆:15 [已解决问题] 解决于 2012-03-22 13:41

先看一下示例的SQL语句:

select ID from (select *,(select top 1 订购日期 from 订单 where ...) as 最近订购 from 客户)  where 最近订购 between @p1 and @p2

对应的添加参数的代码(使用Enterprise Library 3.1):

db.AddInParameter(cmd, p1, DbType.DateTime, dt1);

db.AddInParameter(cmd, p2, DbType.DateTime, dt2);

为了便于阅读,我简化了语句的写法,各位请别管语法问题,我这儿要描述的问题是:使用这个SQL命令来搜索记录,不会抛出异常,但搜索结果是不正确的!而如果把SQL中的参数p1、p2直接改为#2009-2-12 12:00:00#这种形式,结果就正确了!

换句话说,使用参数方式添加参数值搜索结果不正确;直接把时期值写到SQL语句中,就正确了。这是怎么回事呢?

补充说明:1、不使用子查询的话,参数化查询是正确的;2、将DbType.DateTime改为DbType.Date,或者将dt1改为dt1.ToString()同样不能解决。

问题补充:

根据测试,实际情况似乎是数据库把传进去的参数当作字符串对待了。加上cdate函数后就正确了。

戒焦戒躁的主页 戒焦戒躁 | 初学一级 | 园豆:15
提问于:2012-03-19 16:17
< >
分享
最佳答案
0

把 DbType.DateTime 改为 System.Data.OleDb.OleDbType.DBDate 试试

收获园豆:9
dudu | 高人七级 |园豆:30994 | 2012-03-20 11:16

不行。我最终还是使用直接写入SQL语句的方法来做了

戒焦戒躁 | 园豆:15 (初学一级) | 2012-03-22 13:40
其他回答(2)
0

而如果把SQL中的参数p1、p2直接改为#2009-2-12 12:00:00#这种形式,结果就正确了!

你说的意思是不是时间的格式不是你所要的,#2009-2-12 12:00:00#格式。如果是这样,你可以在把p1,p2格式成你要的格式在传递。

收获园豆:3
悟行 | 园豆:12559 (专家六级) | 2012-03-19 16:26

不是这个意思。我是说直接把日期值写在SQL代码里就没事,用参数就不正确。

支持(0) 反对(0) 戒焦戒躁 | 园豆:15 (初学一级) | 2012-03-19 16:29
0

這個 應該 是 與你的語言 環境有關係。也 就是 ,生成的日期 和 db的日期是不一致的。

收获园豆:3
無限遐想 | 园豆:3740 (老鸟四级) | 2012-03-19 16:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册