我是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错误,因此我按照指令将Mainh上的STAThread属性更改为MTAThread。不再有ContextSwitchDeadlock - 而且,连接问题仍然存在。
我希望你能对这个问题有所了解 - 我接近把头发拉出来了。任何见解都将不胜感激。
答案 0 :(得分:0)
问题已解决。非常感谢大家的帮助! :)原来是一个损坏的ODAC dll的组合,然后一些。