一個關於Oracle更新語句引發的時間欄位類型的問題

來源:互聯網
上載者:User

想當初我在做一個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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.