IBatisNet 遇到 DateTime 类型,显的不是那么灵活,测试软件过程中总出现日期方面的查询不准确的情况,总结一下日期方面的一下技巧。
- 如果你想知道你的SQL的真实执行情况,请用事件探查器,不过这里有个技巧就是你的映射文件的写法应该如下:
Code
< isNotEmpty prepend = " And " property = " StartTime " >
<! [CDATA[
p.BeginTime >= ' $StartTime$ '
]] >
</ isNotEmpty >
< isNotEmpty prepend = " And " property = " EndTime " >
<! [CDATA[
p.EndTime <= ' $EndTime$ '
]] >
</ isNotEmpty > - 如果不小心写出了下面的这个方式:#StartTime#,查询结果则如下:
Code
exec sp_executesql N'SELECT [PlanId], [LineId], [PlanTime],
[Deviation], [BeginTime], [EndTime], [During], [PlanDesc]
FROM [Plan] as p
Where p.BeginTime >= @param0 And p.EndTime <= @param1', N'@param0 datetime,@param1 datetime',
@param0 = '01 19 2009 3:26:20:313PM',
@param1 = '01 20 2009 3:26:20:313PM'Code
SELECT [PlanId], [LineId], [PlanTime], [Deviation],
[BeginTime], [EndTime], [During], [PlanDesc] FROM
[Plan] as p Where
p.BeginTime >='2009-1-19 15:11:27' And
p.EndTime <='2009-1-20 15:11:27' - 当时上面的写法有个问题,这个查询的结果可能不是想要的,改到下面形式可能会更精确:
-
Code
<isNotEmpty prepend="And" property="StartTime">
<![CDATA[
p.BeginTime Between '$StartTime$'
]]>
</isNotEmpty>
<isNotEmpty prepend="And" property="EndTime">
<![CDATA[
'$EndTime$'
]]>
</isNotEmpty>
- 不过这里有个雷,如果控件支持可空的日期,一不小心就踏上雷了。
转载请注明出处:http://www.cnblogs.com/winzheng/archive/2009/01/20/1379068.html
下班了,明天续。