2015-09-29 72 views
0

一直在尋找這一整個早晨的答案,但沒有找到任何適合我的東西。我使用此代碼,試圖改變oracle數據庫的日期值,但不斷收到Oracle錯誤「ORA-1843:不是一個有效的一個月:嘗試使用c設置日期時出現oracle錯誤#

using Oracle.DataAccess.Client; 

OracleConnection closeDate = new OracleConnection(oradb); 

OracleParameter[] prm = new OracleParameter[2]; 

closeDate.Open(); 
OracleCommand cmd = new OracleCommand(); 
prm[0] = cmd.Parameters.Add("paramDate", 
       OracleDbType.Date, "05/02/2015", ParameterDirection.Input); 
prm[1] = cmd.Parameters.Add("paramCRN", OracleDbType.Varchar2, "16118009", 
                 ParameterDirection.Input); 
cmd.Connection = closeDate; 
cmd.CommandText = "update vec_complaint set CLOSURE_DATE = :1 where ID = :2"; 
cmd.CommandType = CommandType.Text; 
cmd.ExecuteNonQuery(); 
closeDate.Close(); 
closeDate.Dispose(); 

我猜,我需要聲明的日期莫名其妙的DD/MM/YYYY格式,但無法弄清楚。

回答

3

日期沒有格式,它們是二進制值,就像小數,雙精度浮點數一樣。格式只有在呈現爲字符串或從字符串解析時纔有意義。

假設CLOSURE_DATE是一個日期類型的列,而不是(N)varchar字段,你只需要通過DateTime對象作爲參數值:

var myDate=new DateTime(2015,09,29); 
prm[0] = cmd.Parameters.Add("paramDate", OracleDbType.Date, myDate, 
          ParameterDirection.Input); 

事實上,這是很好的做法,始終傳遞DateTime對象而不是日期或時間字符串。當您知道文本格式和/或用戶區域設置是什麼時,應該在輸入時立即將文本解析爲DateTime或TimeSpan。試圖確定2層的格式,特別是在Web應用程序中,既不容易也不安全。

對於您的情況,您可以在輸入表單上使用DatePicker或Calendar控件作爲DateTime對象檢索關閉日期,然後將其傳遞給數據訪問代碼。

+0

與提交事務有單獨的問題,但它現在可以使用您的示例。感謝你的回答 –