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