vb.net中对于ORACLE的时间查询问题

    这几天在做一个小软件,查询一个ORACLE表中的数据,查询条件中有一个就是查询日期
    以前用VB6做的时候,什么问题都没有,但由于工作需要,要换成VB.NET了,所以赶快敲代码。之前也用过VB.NET做过这种调数据库的软件,但不是ACCESS,就是SQLSERVER2005。这次遇到的问题,莫过于传说中的时间问题。 
    目的:通过MonthCalendar制定查询日期,然后从名为T_HISTORYA中的DT_PRESCDATE字段中查找相关信息。该字段为DATE类型。
    原来在VB6中用的代码为:

SELECT T_HISTORYA.N_PRESCNO,SZ_PATIENTNM,N_SEX,SZ_WARDNM,SZ_DTAENTRYNO,N_INDRUG_BAGCOUNT FROM " & scheme & ".T_HISTORYA WHERE T_HISTORYA.DT_PRESCDATE between '" & daystring & " 00:00:00' and '" & daystring & " 23:59:59' and SZ_PATIENTID=" & patientID & " and SZ_MACHINENO=" & Me.Combo1.Text & "

其中:scheme为通过INI读取的DB方案名
            daystring为通过MonthView读取的当天日期,用户在触发MonthView的Click事件后可改变daystring的数值
            patientID为病人ID
没有任何难度的在VB6中完成了该查询。由于MonthView里面只是提供日期数值,也就是yyyy-mm-dd,而在oracle中保存的是含有HH24:mi:ss的类型,所以这里就用了一个between...and来范围性的查询结果。

现在用了VB.NET对ORACLE进行查询,事情就多了………………
           很多控件的事件,方法都发生了改变,幸亏手头有MSDN2005,还有CSDN。用ORACLE的人都该知道,在SQLPLUS中查询系统事件的时候,是可以制定显示的类型的;如果你不改NLS的话,就得改注册表。
         通过alter session set nls_date_format ='yyyy-mm-dd hh24:mi:ss'命令,可以改变当次查询之后的时间格式,但如果重新启动sqlplus之后,格式又会变回来。由于ORACLE中的DATE中的显示类型与字符集有关系,我这边的默认显示类型为"dd-mm月-yy",如果直接在vb.net中用上面的sql来查的话,什么都查不到,还会报错。后来经过测试发现,在查询前,执行这个ALTER语句之后,我在用类似于原有VB6的语句就可以成功查询了。所以在这个地方,我在当前路径下面作个一个批处理文件,执行一个SQL文件,文件的内容就是这句ALTER语句。

Shell(My.Application.Info.DirectoryPath + "/SQL/changedateformat.bat", , True)

这里要留意的,就是一定要在软件发布后,将这个SQL文件放在当前目录下,而不要放在SQL文件夹下面,因为执行该批处理文件的时候,程序(不是批处理文件)会扫描其所在目录,而不是我指定的目录。

新的SQL语句为:

select N_PRESCNO,SZ_PATIENTNM,N_SEX,SZ_WARDNM,SZ_DTAENTRYNO,N_INDRUG_BAGCOUNT from fds_user.t_historya where dt_prescdate between to_date('" & daystring & " 00:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('" & daystring & " 23:59:59','yyyy-mm-dd hh24:mi:ss') and SZ_PATIENTID=" & patientID & "

        在软件LOAD的时候,启动批处理文件,然后就安心的查询吧-_-
        这里要留意的就是 to_date的使用,这个函数其实是ORACLE的,相对应的是to_char函数。记得在日期后面添加时间点范围的时候,双引号后面要有个空格,这样才能制造出"yyyy-dd-mm hh24:mi:ss"的形式,多注意跟踪sql文件的变量取值,避免出现一些不必要的失误。

       之前执行该批处理文件,目的还是为了让该软件可以在别的机器上顺利的运行。

 

      我以前是用VB来写ASP.NET的,现在开始从VB6转型到VB.NET,工作需要……大家共勉
       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值