zoukankan      html  css  js  c++  java
  • 一个关于Oracle更新语句引发的时间字段类型的问题

    想当初我在做一个ASP.NET网站的时候,用的是Oracle数据库更新数据。表里面的字段有int类型的,string类型的,还有date类型的,在和asp.NET前台控件绑定更新的时候总是出现问题,我当时上网查了好多东西,总是看的模棱两可,毕竟也是头一次接触操作Oracle。我把我最初写的更新贴出来(现在这个问题已经解决了),你们看看:

    更新语句如下:
    sql = string.Format("update xxt_registration r set r.name='{0}',r.ip='{1}',r.port='{2}',r.time='{3}',r.location='{4}',r.installtime='{5}',r.type=(select d.id from xxt_devicetype d where d.name='{6}') where r.id='{7}'",

    this.txtname.Text.Trim(), this.txtip.Text.Trim(), this.txtport.Text.Trim(), this.txttime.Text.Trim(), this.txtlocation.Text.Trim(), this.txtinstalltime.Text.Trim(), this.DropDownList_tname.Text.Trim(), this.txtid.Text.Trim());

    首先,出现的问题就是“类型”与“单引号”的问题,报的错误是,如下图:

    这个错误是,ORA-01861: 文字与格式字符串不匹配。

    可能是因为你那个表里面的time这一列,数据类型是date类型的。

    你传递一个字符格式的内容进去以后,数据库不知道如何格式化这个字符信息为日期。

    下面是一个网友提供的,错误重现的例子与解决的办法。在这里非常感谢他的热心帮助(链接地址是http://zhidao.baidu.com/question/551220541?quesup2&oldq=1)

    SQL> create table test_time( time   date );
    表已创建。
    SQL> insert into test_time values('2013-05-17 16:55');
    insert into test_time values('2013-05-17 16:55')
                                 *
    ERROR 位于第 1 行:
    ORA-01861: 文字与格式字符串不匹配
    SQL> insert into test_time values('2013-05-17 16:55:30');
    insert into test_time values('2013-05-17 16:55:30')
                                 *
    ERROR 位于第 1 行:
    ORA-01861: 文字与格式字符串不匹配
    SQL> insert into test_time values(  TO_DATE('2013-05-17 16:55:30', 'YYYY-MM-DD HH24:MI:SS') );
    已创建 1 行。

    对于上面的更新语句,我总结如下:

    string类型的可以加单引号,像r.name='{0}',r.ip='{1}',r.port='{2}'等等都是可以的;

    int类型的在Oracle数据库更新语句中是不能加单引号的,像id='{7}'是不行的,应该去掉单引号改为id={7};

    date类型可以加单引号,但不是像r.time='{3}'这样的,应该应用TO_DATE()来转换格式,如:r.time=to_date('{3}','yyyy-mm-dd')。asp.net前台控件中输入的是字符串类型的数据,更新的时候当然要转换成时间类型格式的,修改后的更新语句如下:

    sql = string.Format("update xxt_registration r set r.name='{0}',r.ip='{1}',r.port='{2}',r.location='{3}',r.installtime=to_date('{4}','yyyy-mm-dd'),r.type=(select d.id from xxt_devicetype d where d.name='{5}') where r.id={6}",
                        this.txtname.Text.Trim(), this.txtip.Text.Trim(), this.txtport.Text.Trim(), this.txtlocation.Text.Trim(), this.Calendarinstalltime.SelectedDate.ToString("yyyy-MM-dd"), this.DropDownList_tname.Text.Trim(), this.txtid.Text.Trim());

    最后,如果您还需要Oracle中TO_DATE格式的其它解答,下面的链接地址有详细的解说,相信一定能帮助您的。

       http://www.cnblogs.com/ajian/archive/2009/03/25/1421063.html

  • 相关阅读:
    java中&和&&
    java保留字
    最优路径算法合集(附python源码)(原创)
    十大经典排序算法(python实现)(原创)
    电子欠款单设想(原创)
    羽毛球友谊赛规则(附带程序)(原创)
    基于python的opcode优化和模块按需加载机制研究(学习与个人思路)(原创)
    lazy_import源码解析(原创)
    多线程的音频打标记的python实现(原创)
    关于塔防游戏的浅析(原创)
  • 原文地址:https://www.cnblogs.com/litao4047/p/3127237.html
Copyright © 2011-2022 走看看