我是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 - 而且,仍然存在連接問題。
我希望你可以在這個問題上提出一些建議 - 我正在拉我的頭髮。任何洞察力將不勝感激。
您是否確保您的應用程序(安裝時)對各種Oracle客戶端文件具有至少「讀取」權限並且該文件/註冊表虛擬化不會產生干擾?您是否還確保沒有防火牆阻止Oracle服務運行的端口上的傳出流量? – slugster 2010-07-21 10:55:08
是的,它具有讀取權限;沒有防火牆阻止任何端口。如果檢查出第一件事。我仍然想知道爲什麼它只在VS2005 IDE上運行時才起作用 - 該應用程序就像在當時的魅力一樣。 – 2010-07-21 11:01:37
另外,如果我使用SQLNET.ORA,則會出現「數據包寫入失敗」錯誤,並且無法從兩個實例進行連接 - 調試器和安裝。 IS提供任何線索?現在我不使用SQLNET.ORA文件。 – 2010-07-22 06:00:02