2010-07-21 50 views
2

我是Oracle新手,存在一个我正面临的问题。当我从IDE运行应用程序 - Visual Studio 2005时,数据库连接可以顺利建立,但是当我运行应用程序的安装版本时,数据库连接失败,并且出现TNS:连接超时发生错误。ODAC&C# - TNS:发生连接超时 - 仅通过VS2005调试器连接

我试着用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错误调试器,所以我遵循指令并将属性从STAThread更改为Main()上的MTAThread。没有更多的ContextSwitchDeadlock - 而且,仍然存在连接问题。

我希望你可以在这个问题上提出一些建议 - 我正在拉我的头发。任何洞察力将不胜感激。

+0

您是否确保您的应用程序(安装时)对各种Oracle客户端文件具有至少“读取”权限并且该文件/注册表虚拟化不会产生干扰?您是否还确保没有防火墙阻止Oracle服务运行的端口上的传出流量? – slugster 2010-07-21 10:55:08

+0

是的,它具有读取权限;没有防火墙阻止任何端口。如果检查出第一件事。我仍然想知道为什么它只在VS2005 IDE上运行时才起作用 - 该应用程序就像在当时的魅力一样。 – 2010-07-21 11:01:37

+0

另外,如果我使用SQLNET.ORA,则会出现“数据包写入失败”错误,并且无法从两个实例进行连接 - 调试器和安装。 IS提供任何线索?现在我不使用SQLNET.ORA文件。 – 2010-07-22 06:00:02

回答

0

问题已解决。非常感谢您的帮助,每个人! :)原来是一个损坏的ODAC DLL的,然后一些组合。