.net - 将 .NET DateTime 转换为 OracleDate

标签 .net oracle odp.net

我正在尝试使用 ODP.NET 将 .NET DateTime 值插入到 Oracle DATE 列中。到目前为止,我已经尝试使用 OracleDate() 构造函数来转换 .NET DateTime,如下所示:

new OracleDate(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTimeNow.Hour, DateTime.Now.Minute, DateTime.Now.Second)

当我尝试这个时,它会在列中插入正确的年、月和日,但时间总是设置为午夜。如何插入正确的时间和日期?

没有参数,SQL 看起来像这样(DateTime.Now 用于清楚,否则我只使用 SYSDATE):

"update mytable set timestamp = '" + new OracleTimeStamp(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTimeNow.Second) + "'"

最佳答案

根据this你应该使用 OracleTimeStamp 作为 OracleDbType 来实现你想要的......

OracleDate 没有时间部分...这种行为开始于前一段时间(IIRC Oracle 8 左右)使用 JDBC 驱动程序...使用 JDBC 驱动程序有一些奇怪的解决方法,我现在不记得了...我不知道 ODP.NET 是否有解决方法... OracleTimeStamp 是官方支持的带有时间部分的日期方式...

EDIT - OP添加SQL语句后:

首先,该语句包含两个问题 - 永远不要将列/表命名为保留字(即 timestamp)...另一个问题是缺少使用在这种情况下的参数不会导致 SQL 注入(inject),但仍然是不好的做法,并且会导致(如果多次使用同一语句)将性能损失降至最低...

如果您仍然想以这种方式使用它,那么这将起作用:

"update mytable set timestamp = TO_DATE ('" + DateTime.Now.ToString ("yyyyMMddHHmmss") + "', 'YYYYMMDDHH24MISS')";

关于.net - 将 .NET DateTime 转换为 OracleDate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7273076/

相关文章:

asp.net - ORA-12571 : TNS:packet writer failure with ASP. 网络

odp.net - 为什么 Oracle 在实体数据模型向导中不显示为下拉选项,但在服务器资源管理器中显示?

c# - 加载具有较低权限的程序集

c# - 如何正确避免C#中的线程创建开销/重用线程

c# - 最快的哈希代码生成器 .NET

oracle - 捕获触发 DUP_VAL_ON_INDEX 的值

java - 如何在 SYS.URITYPE 类型的 ORACLE 表列中存储数据

oracle物化 View 刷新时间

c# - OracleBulkCopyOptions.Default 和 OracleBulkCopyOptions.UseInternalTransaction 之间的区别。

c# - 自定义 membershiprovider 验证成功但无法获取 User()