3

我有一个 csv 文件,我需要再添加一列(截至日期)并使用 c# 将它们保存到 oracle 表中。我所做的是将数据添加到 Datatable 并使用 OracleBulkCopy 将所有数据插入到 db 表中。

现在的问题是,当我在 Toad 中检查我的 oracle 表时,第一列显示我 10/08/1320 并且显然 oracle 无法存储早于 1900 的日期。当我从 Toad 中勾选该字段时,它告诉我“The指定的日期超出了 ...." 的支持日期范围。

以下是我尝试过的其他三种解决方案,它们都有同样的问题。

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);
4

1 回答 1

2

我通过使用 to_timestamp 而不是 to_date 解决了这个问题......

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'),"
于 2015-02-05T16:26:40.390 回答