【发布时间】:2020-10-17 06:38:17
【问题描述】:
我正在使用 Oracle.ManagedDataAccess.Core 2.18.6 连接 oracle DB。当我调用 con.Open() 时遇到问题 ORA-00604:递归 SQL 级别 1 发生错误 ORA-01882:找不到时区...Oracle .NET 的数据提供程序,带有 .Net Core 2.2 的托管驱动程序。实施以下解决方案后仍然出现相同的错误。
-我的代码:
DataTable dt = new DataTable();
Console.WriteLine("Called ");
using (OracleConnection Connection = new OracleConnection(utilityManager.Decrypt(ConnString)))
{
Console.WriteLine("********* Before Connection Open********* ");
Connection.Open();
Console.WriteLine("********* Connection Open********* ");
OracleDataAdapter DataAdapter = new OracleDataAdapter();
using (OracleCommand cmd = new OracleCommand(strSQL, Connection))
{
cmd.BindByName = true;
cmd.CommandText = strSQL;
cmd.CommandType = CommandType.Text;
DataAdapter.SelectCommand = cmd;
DataSet ds = new DataSet();
DataAdapter.Fill(ds);
dt = ds.Tables[0];
}
}
我试过的解决方案:
-在docker文件中设置时区如下
ENV TZ=America/New_York
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
-使用Oracle全球化类
this.Connection = new OracleConnection();
this.Connection.ConnectionString = ...
this.Connection.Open();
OracleGlobalization info = this.Connection.GetSessionInfo();
info.TimeZone = "America/New_York";
this.Connection.SetSessionInfo(info)
-https://serverfault.com/questions/683605/docker-container-time-timezone-will-not-reflect-changes
【问题讨论】:
-
对我来说,我可以通过在 Dockerfile 中的 ENTRYPOINT 之后移动 ENV TZ= 片段来解决此问题。由于某种原因,它没有从其他任何地方获取环境变量。
标签: c# oracle docker .net-core dockerfile