将 .NET DateTime 转换为 OracleDate

kit*_*awk 3 .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)
Run Code Online (Sandbox Code Playgroud)

当我尝试此操作时,它会在列中插入正确的年、月和日,但时间始终设置为午夜。如何插入正确的时间和日期?

如果没有参数,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) + "'"
Run Code Online (Sandbox Code Playgroud)

Cor*_*ter 5

您应该为此使用参数。当等效的 .NET 数据类型就可以时,也无需使用特定于 Oracle 的数据类型。这样做的优点是可以在以后轻松地将 ODP.NET 替换为不同的驱动程序,因为大多数其他驱动程序都使用本机 .NET 数据类型。

using (OracleConnection conn = new OracleConnection("your connection string here")
{
    string query = "update mytable set timestamp = :foo";

    using (OracleCommand cmd = new OracleCommand(query, conn))
    {
        cmd.Parameters.Add(":foo", DateTime.Now);

        cmd.ExecuteNonQuery();
    }
}
Run Code Online (Sandbox Code Playgroud)