我编写了一个.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分钟运行一次,它将运行不止一次,但是如果足够的时间过去了,就会发生一些事情,导致运行停止。
我对这个问题很困惑。我非常感谢任何帮助或建议尝试。