Windows服务中的ODBC连接在第二次连接尝试时失败

时间:2013-01-20 19:14:15

标签: .net service ado.net odbc 4d-database

我写了一个.Net Windows服务,每4小时将数据从4D数据库(v12)复制到SQL Server数据库。它在Windows 7 32位上运行并作为本地系统运行。我使用的是4D ODBC驱动程序的12.02版。

当服务1st运行时,一切正常。在第二次运行时,与SQL Server的连接仍然有效,但与4D的ODBC连接收到以下错误:

  

System.Data.Odbc.OdbcException(0x80131937):ERROR [08001]客户端   无法建立连接:SQL Se是否在   System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle,   RetCode retcode)at   System.Data.Odbc.OdbcConnectionHandle..ctor(OdbcConnection连接,   OdbcConnectionString constr,OdbcEnvironmentHandle environmentHandle)   在System.Data.Odbc.OdbcConnectionOpen..ctor(OdbcConnection   outerConnection,OdbcConnectionString connectionOptions)at   System.Data.Odbc.OdbcConnectionFactory.CreateConnection(DbConnectionOptions   options,DbConnectionPoolKey poolKey,Object poolGroupProviderInfo,   DbConnectionPool池,DbConnection owningObject)at   System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions   options,DbConnectionPoolKey poolKey,Object poolGroupProviderInfo,   DbConnectionPool池,DbConnection owningConnection,   DbConnectionOptions userOptions)at   System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(的DbConnection   owningConnection,DbConnectionPoolGroup poolGroup,DbConnectionOptions   userOptions)at   System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(的DbConnection   owningConnection,TaskCompletionSource 1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource 1次重试,DbConnectionOptions userOptions)at at   System.Data.ProviderBase.DbConnectionInternal.OpenConnection(的DbConnection   outerConnection,DbConnectionFactory connectionFactory)at   System.Data.Odbc.OdbcConnection.Open()at   DataWarehouseLoader.DAL.DWGenerator.Run()at   DataWarehouseSvc.DataWarehouseSvc.OnTimerElapsed(对象发送者,   ElapsedEventArgs e)

每次运行后,代码都会小心处理与SQL Server和4D的连接:

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

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

一旦发生错误,ODBC连接永远不会再次运行,直到我停止/启动服务。这将允许它再次工作一次。我尝试连接系统DSN以及无DSN连接,但结果是一样的。我相信如果我更频繁地运行服务,比如说每10分钟运行一次,它将不止一次工作,但是当有足够的时间停止工作时必须发生一些事情。

我对这个问题很困惑。我非常感谢您提供任何帮助或建议。

1 个答案:

答案 0 :(得分:0)

我无法找到错误的地方。我相信这是4D ODBC驱动程序中的一个错误。我的工作是创建一个单独的控制台应用程序来处理4D部分。

我可以在需要时从服务启动此控制台应用程序作为新进程。这样,当它完成连接到4D的控制台应用程序从内存中卸载但服务可以继续运行时。

从内存中卸载程序似乎可以清除w / 4D的任何连接问题,并允许后续运行仍然有效。