2010-07-21 49 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的,然後一些組合。