在Oracle中插入日期时交换年份和世纪 [英] Year and century being swapped when inserting a date into Oracle
本文介绍了在Oracle中插入日期时交换年份和世纪的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在Oracle 11g中有下表:
I have the following table in Oracle 11g:
create table tb_dates ( dt_date date )
C#4.5中的以下代码:
And the following code in C# 4.5:
DataTable dt = new DataTable();
DataColumn dc = new DataColumn();
dc.DataType = Type.GetType("System.DateTime");
dc.ColumnName = "dt_date";
dt.Columns.Add(dc);
for (int i = 0; i < 5; i++)
{
DataRow dr = dt.NewRow();
dr["dt_date"] = System.DateTime.Now;
dt.Rows.Add(dr);
}
using (OracleBulkCopy bulkCopy = new OracleBulkCopy("data source=orcl;user id=scott;password=tiger", OracleBulkCopyOptions.Default))
{
bulkCopy.DestinationTableName = "tb_dates";
bulkCopy.WriteToServer(dt);
}
表中的日期必须为 2014/05/15
。但是,当我在Oracle中选择时,我有 1420/05/15
。这一年已经逆转。
我正在使用Oracle 11g和Oracle ODP.NET 12客户端。我必须为此代码正常工作吗?
The dates in the table must be 2014/05/15
. But, when I do the select in Oracle, I have 1420/05/15
. The year has been reversed.
I'm using Oracle 11g and the Oracle ODP.NET 12 client. What I have to do for this code work correctly?
推荐答案
也有问题。
你可以简单地改变代码中的一半。
have problem also.
you can simply change halves of year in code.
foreach (DataColumn dc in dataTable.Columns)
{
if (dc.DataType == typeof(DateTime))
{
foreach (DataRow dr in dataTable.Rows)
{
object value = dr[dc];
if (!Convert.IsDBNull(value))
{
DateTime d = (DateTime)dr[dc];
int year;
int century = Math.DivRem(d.Year, 100, out year);
dr[dc] = new DateTime(year * 100 + century, d.Month, d.Day);
}
}
}
}
这篇关于在Oracle中插入日期时交换年份和世纪的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文