2013-01-20 85 views
0

我编写了一个.Net Windows服务,每4小时将数据从4D数据库(v12)复制到SQL Server数据库。它在Windows 7 32位上运行并以本地系统运行。我正在使用4D ODBC驱动程序的12.02版。Windows服务中的ODBC连接在第二次连接尝试时失败

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

System.Data.Odbc.OdbcException (0x80131937): ERROR [08001] Client unable to establish connection: Is the SQL Se at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode) at System.Data.Odbc.OdbcConnectionHandle..ctor(OdbcConnection connection, OdbcConnectionString constr, OdbcEnvironmentHandle environmentHandle) at System.Data.Odbc.OdbcConnectionOpen..ctor(OdbcConnection outerConnection, OdbcConnectionString connectionOptions) at System.Data.Odbc.OdbcConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) at System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, 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 retry, DbConnectionOptions userOptions) 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(Object sender, ElapsedEventArgs e)

的代码是谨慎处置在每次运行后,连接到SQL Server和4D的下列方式:

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

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

一旦错误发生ODBC连接永远不会再工作,直到我停止/启动服务。这将允许它再次运行一次。我曾尝试使用System DSN以及DSN-less连接进行连接,但结果相同。我相信,如果我的服务更频繁地运行,例如每10分钟运行一次,它将运行不止一次,但是如果足够的时间过去了,就会发生一些事情,导致运行停止。

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

回答

0

我一直没能找到问题所在。我相信这是4D ODBC驱动程序中的一个错误。我的工作是创建一个单独的控制台应用程序来处理4D部分。

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

从内存卸载程序似乎清理连接问题w/4D,并允许后续运行仍然工作。

相关问题