2

私は Oracle を初めて使用しますが、直面している問題があります。IDE - Visual Studio 2005 からアプリケーションを実行すると、データベース接続はスムーズに確立されますが、アプリのインストール済みバージョンを実行すると、DB 接続が失敗し、TNS: Connect timeout occured エラーが発生します。

オンラインで見つかった 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 エラーが発生していたので、指示に従い、Main() の属性を STAThread から MTAThread に変更しました。ContextSwitchDeadlock はもうありません - それでも、接続の問題は解決しません。

私はあなたがこの問題に光を当ててくれることを望んでいました. 任意の洞察をいただければ幸いです。

4

1 に答える 1

0

問題は解決しました。皆様、大変お世話になりました!:) 破損した ODAC dll といくつかの組み合わせであることが判明しました。

于 2010-07-23T07:21:03.310 に答える