0

4Dデータベース(v12)からSQLServerデータベースに4時間ごとにデータをコピーする.NetWindowsサービスを作成しました。Windows 7 32ビットで実行されており、ローカルシステムとして実行されています。4DODBCドライバーのバージョン12.02を使用しています。

サービスが最初に実行されると、すべてが正常に機能します。2回目の実行でも、SQL Serverへの接続は機能しますが、4DへのODBC接続では次のエラーが発生します。

System.Data.Odbc.OdbcException(0x80131937):エラークライアントは接続を確立できません:System.Data.Odbc.OdbcConnectionHandleのSystem.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle、RetCode retcode)のSQLSeですか..ctor(OdbcConnection connection、OdbcConnectionString constr、OdbcEnvironmentHandle environmentHandle)at System.Data.Odbc.OdbcConnectionOpen..ctor(OdbcConnection externalConnection、OdbcConnectionString connectionOptions)at System.Data.Odbc.OdbcConnectionFactory.CreateConnection(DbConnectionOptions options、DbConnectionP 、DbConnectionPoolプール、DbConnection owningObject)at System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions options、DbConnectionPoolKey poolKey、Object poolGroupProviderInfo、System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection、DbConnectionPoolGroup poolGroup、DbConnectionOptions userOptions)のDbConnectionPoolプール、DbConnection owningConnection、DbConnectionOptions userOptions)、System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection、TaskCompletion1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1回再試行、System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection externalConnection、DbConnectionFactory connectionFactory)のDbConnectionOptions userOptions)、DataWarehouseLoader.DAL.DWGenerator.Run()のSystem.Data.Odbc.OdbcConnection.Open()、DataWarehouseSvc.DataWarehouseSvc。 OnTimerElapsed(オブジェクト送信者、ElapsedEventArgs e)

コードは、次の方法で実行するたびに、SQLServerと4Dの両方への接続を慎重に破棄します。

using (_connSQL = new SqlConnection(DataWarehouseCS))
{
   _connSQL.Open();

   using (_conn4D = new OdbcConnection(4DCS))
   {
      _conn4D.Open();
      Load4DTables();
   }   
}

エラーが発生すると、サービスを停止/開始するまで、ODBC接続は再び機能しなくなります。これにより、もう一度機能するようになります。システムDSNとDSNなしの接続で接続しようとしましたが、結果は同じです。サービスをもっと頻繁に実行する場合、たとえば10分ごとに1回実行すると、複数回機能すると思いますが、十分な時間が経過すると機能しなくなる何かが発生する必要があります。

私は問題が何であるかについて非常に混乱しています。ヘルプや提案をお試しいただければ幸いです。

4

1 に答える 1

0

何が悪いのかわかりませんでした。これは4DODBCドライバーのバグだと思います。私の回避策は、4Dパーツを処理するための別のコンソールアプリを作成することです。

このコンソールアプリは、必要に応じてサービスから新しいプロセスとして起動できます。このように、4Dに接続されたコンソールアプリが終了すると、メモリからアンロードされますが、サービスは実行されたままになります。

プログラムをメモリからアンロードすると、4Dでの接続の問題がすべてクリーンアップされ、後続の実行が引き続き機能するようになります。

于 2013-01-22T21:15:09.443 に答える