2013-10-23 47 views
2

我有一個csv文件,我需要添加一列(as-date-date)並使用c#將它們保存到oracle表中。我所做的是將數據添加到Datatable,並使用OracleBulkCopy將所有數據插入到數據庫表中。將c#datetime插入到oracle表中時發生日期格式問題

現在的問題是,當我檢查我在蟾蜍的oracle表時,第一列顯示我10/08/1320,顯然oracle不能存儲比1900更早的日期。當我從蟾蜍的字段中提取時,它告訴我說「指定的日期超出範圍的支持日期......」。

下面是我嘗試過的其他三種解決方案,都有同樣的問題。

using Oracle.DataAcccess.Client; 

//Solution 1 

DataTable dt = new DataTable(); 

dt.Columns.Add("Product_Date",typeof(DateTime));//The first column of my oracle table is Date 
dt.Columns.Add(....); 
... 

//loop my csv file 
DataRow dr = dt.NewRow(); 
dr[0] = new DateTime(2013,10,8); 
dr[1] = ...; 
... 
dt.Rows.Add(dr) 

OracleBulkCopy bc = new OracleBulkCopy(myConn); 
bc.DestinationTableName = "TableName"; 
bc.WriteToServer(dt); 

//Solution 2 

DataTable dt = new DataTable(); 

dt.Columns.Add("Product_Date",typeof(OracleDate));//The first column of my oracle table is Date 
dt.Columns.Add(....); 
... 

//loop my csv file 
DataRow dr = dt.NewRow(); 
DateTime dtime = DateTime(2013,10,8); 
dr[0] = new OracleDate(dtime); 
dr[1] = ...; 
... 
dt.Rows.Add(dr) 

OracleBulkCopy bc = new OracleBulkCopy(myConn); 
bc.DestinationTableName = "TableName"; 
bc.WriteToServer(dt); 

//Solution 3 

DataTable dt = new DataTable(); 

dt.Columns.Add("Product_Date",typeof(string));//The first column of my oracle table is Date 
dt.Columns.Add(....); 
... 

//loop my csv file 
DataRow dr = dt.NewRow(); 
DateTime dtime = DateTime(2013,10,8); 
dr[0] = dtime.ToString("ddMMMyy"); 
dr[1] = ...; 
... 
dt.Rows.Add(dr) 

OracleBulkCopy bc = new OracleBulkCopy(myConn); 
bc.DestinationTableName = "TableName"; 
bc.WriteToServer(dt); 

回答

1

我解決了這個問題,通過使用替代TO_DATE TO_TIMESTAMP ...

DateTime date = Convert.ToDateTime(txtTrainDate.Text); 
DateTime time = Convert.ToDateTime(ddTrainTime.SelectedValue); 
DateTime dtCOMPLTDTTM = new DateTime(date.Year, date.Month, date.Day, time.Hour, time.Minute, time.Second); 
string strCOMPLTDTTM = dtCOMPLTDTTM.ToString("dd.MM.yyyy HH:mm:ss") 

然後,在Oracle插入...

to_timestamp('" + strCOMPLTDTTM + "', 'DD.MM.YYYY hh24:mi:ss'),"