我是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