C# 在Oracle中运行应用程序时,将DateTime字段更改为时间戳字段
我正在使用Oracle 11(64位)和Oracle.DataAccess(ODP.NET)4.1 我有一个带有日期字段的表C# 在Oracle中运行应用程序时,将DateTime字段更改为时间戳字段,c#,oracle,datetime,odp.net,C#,Oracle,Datetime,Odp.net,我正在使用Oracle 11(64位)和Oracle.DataAccess(ODP.NET)4.1 我有一个带有日期字段的表 create table x (..., y date, ...); 还有一个批量插入到此表的应用程序 var bulkCopy = new OracleBulkCopy(connection) { DestinationTableName = "x" }; bulkCopy.WriteToServer(table); 当我运行以下DDL时 ALTER TABLE x
create table x (..., y date, ...);
还有一个批量插入到此表的应用程序
var bulkCopy = new OracleBulkCopy(connection) { DestinationTableName = "x" };
bulkCopy.WriteToServer(table);
当我运行以下DDL时
ALTER TABLE x MODIFY (y timestamp );
启动应用程序,然后一切就绪,时间戳字段正确填充(我们可以在字段值中看到分钟、秒和毫秒)
2016-03-07 06:04:34.456
等等
问题是,当应用程序正在运行且DDL正在运行时,大量插入的字段会失去它们的时间部分。他们变得有点像
2016-03-07 00:00:00.000
也就是说,当字段为date且应用程序正在运行时,则当运行以下DDL时
ALTER TABLE x MODIFY (y timestamp );
所有新插入的字段都会释放其时间部分
你认为它为什么会这样
注意:Oracle返回以下版本文本
select * from v$version;
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
"CORE 11.2.0.4.0 Production"
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
在应用程序运行时执行
altertable…
语句?这看起来不太聪明,你应该修改你的数据库,分别。应用程序设计。问题是我们无法停止应用程序,它正在被积极使用。但是我们需要毫秒值,Oracle日期列不包含毫秒。如果重新启动应用程序,没有问题。表中日期列的.net数据类型是什么?它是被截断的还是用日期/时间填充的?它是一个带有毫秒值的.Net日期时间,并且被填充。我们用一个新启动的应用程序对其进行了测试。那么,再次阅读您的问题,您是在执行批量插入,然后将列类型更改为时间戳?这将不起作用,因为如果源列是没有时间的日期,则转换该列无法从无数据创建时间。另外,仅供参考,我有一个带有日期列的oracle表,该列显示时间?