简体   繁体   English

ODAC&C#-TNS:发生连接超时-仅通过VS2005调试器进行连接

[英]ODAC & C# - TNS: Connect timeout occurred - Connecting only through VS2005 debugger

I am new to Oracle, and there is an issue I am facing. 我是Oracle的新手,我面临一个问题。 When I run the application from IDE - Visual Studio 2005, The database connection is established smoothly, but when I run an installed version of the app, the DB connection fails and I get a TNS: Connect timeout occurred error. 当我从IDE-Visual Studio 2005运行该应用程序时,数据库连接建立得很顺利,但是当我运行该应用程序的已安装版本时,数据库连接失败并且出现了TNS:发生连接超时错误。

I tried with SQLNET.ORA and similar solutions found online, but I could not resolve the issue. 我尝试使用SQLNET.ORA和在线找到的类似解决方案,但无法解决问题。 I wonder why this happens, since the application running through the IDE and through an installation is on the same PC. 我不知道为什么会这样,因为通过IDE和安装运行的应用程序在同一台PC上。 I made sure the TNSNAMES.ORA file was correctly edited, and I can connect through an instance of the application running directly on Visual Studio. 我确保正确编辑了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;
}

The stack trace reads like this: 堆栈跟踪如下所示:

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)

The tnsnames.ora is something like this: 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 )
    )
  )

In the meanwhile, I was being issued a ContextSwitchDeadlock error through the debugger, so I followed instructions and changed the attribute from STAThread to MTAThread on Main(). 同时,通过调试器向我发出了ContextSwitchDeadlock错误,因此我按照说明进行了操作,并将Main()上的属性从STAThread更改为MTAThread。 No more ContextSwitchDeadlock - and Still, the connection issue persists. 不再需要ContextSwitchDeadlock-并且,连接问题仍然存在。

I was hoping you could shed some light on the issue - I am close to pulling my hair out. 我希望您能对此问题有所了解-我快要拔头发了。 Any insight would be appreciated. 任何见识将不胜感激。

Issue was resolved. 问题已解决。 Thank you very much for your help, everyone! 非常感谢大家的帮助! :) Turned out to be a combination of corrupted ODAC dll's and then some. :)原来是损坏的ODAC dll的组合,然后是一些。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM