【问题标题】:ODAC & C# - TNS: Connect timeout occurred - Connecting only through VS2005 debuggerODAC & C# - TNS:发生连接超时 - 仅通过 VS2005 调试器连接
【发布时间】:2010-07-21 10:05:51
【问题描述】:

我是 Oracle 新手,遇到了一个问题。当我从 IDE - Visual Studio 2005 运行应用程序时,数据库连接建立顺利,但是当我运行已安装的应用程序版本时,数据库连接失败并出现 TNS:发生连接超时错误。

我尝试使用 SQLNET.ORA 和在线找到的类似解决方案,但无法解决问题。我想知道为什么会发生这种情况,因为通过 IDE 和通过安装运行的应用程序位于同一台 PC 上。我确保正确编辑了 TNSNAMES.ORA 文件,并且我可以通过直接在 Visual Studio 上运行的应用程序实例进行连接。

public bool connectToDatabase(string dbConnStr)
{
    try
    {
        databaseConnection = dbConnStr;
        OracleConnection dbConn = new OracleConnection(databaseConnection);
        if (dbConn == null)
        {
            CreateDLLLogFiles.ErrorLog(CreateDLLLogFiles.FileName, "Connection object is null");
            return false;
        }
        if (dbConn.State.ToString().Equals("Closed", StringComparison.OrdinalIgnoreCase))
        {
            CreateDLLLogFiles.ErrorLog(CreateDLLLogFiles.FileName, "DB connection - " + dbConn.ConnectionString);
            dbConn.Open();
            return true;
        }
    }
    catch (Exception ex)
    {
        CreateDLLLogFiles.ErrorLog(CreateDLLLogFiles.FileName, ex.Message + "\n" + ex.StackTrace);
        CreateDLLLogFiles.ErrorLog(CreateDLLLogFiles.FileName, "DB String - " + databaseConnection);

        return false;
    }
    return false;
}

堆栈跟踪如下所示:

7/22/2010 6:38:51 PM    ORA-12170: TNS:Connect timeout occurred
   at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
   at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, Object src)
   at Oracle.DataAccess.Client.OracleConnection.Open()
   at SQL.connectToDatabase(String dbConnStr)

tnsnames.ora 是这样的:

MySource =
  (DESCRIPTION =
    (CONNECT_TIMEOUT=180)(RETRY_COUNT=2)
    (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 125.63.77.232)(PORT = 1521)))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = MySource )
    )
  )

与此同时,调试器向我发出了 ContextSwitchDeadlock 错误,因此我按照说明在 Main() 上将属性从 STAThread 更改为 MTAThread。不再有 ContextSwitchDeadlock - 连接问题仍然存在。

我希望您能对这个问题有所了解 - 我快要拔掉头发了。任何见解将不胜感激。

【问题讨论】:

  • 您是否确保您的应用程序(安装时)至少对各种 Oracle 客户端文件具有 Read 权限,并且文件/注册表虚拟化不会干扰?您是否还确保没有防火墙阻止运行 Oracle 服务的端口上的传出流量?
  • 是的,它具有读取权限;也没有防火墙阻止任何端口。首先检查一下。我仍然想知道为什么它只在 VS2005 IDE 上运行时才有效 - 应用程序在那时就像一个魅力。
  • 此外,如果我使用 SQLNET.ORA,我会收到“数据包写入失败”错误,并且无法从两个实例连接 - 调试器和安装。这是提供任何线索吗?目前我没有使用 SQLNET.ORA 文件。

标签: c# visual-studio-2005 oracleclient tnsnames odac


【解决方案1】:

问题已解决。非常感谢大家的帮助! :) 原来是损坏的 ODAC dll 的组合,然后是一些。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-21
    • 2019-01-21
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 2019-11-13
    • 1970-01-01
    相关资源
    最近更新 更多