我编写了一个 .Net Windows 服务,每 4 小时将数据从 4D 数据库 (v12) 复制到 SQL Server 数据库。它在 Windows 7 32 位上运行并作为本地系统运行。我正在使用 4D ODBC 驱动程序的 12.02 版。
当服务 1st 运行时,一切正常。在第二次运行时,与 SQL Server 的连接仍然有效,但与 4D 的 ODBC 连接出现以下错误:
System.Data.Odbc.OdbcException (0x80131937): 错误 [08001] 客户端无法建立连接: System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode) 处的 SQL Se 在 System.Data.Odbc.OdbcConnectionHandle ..ctor(OdbcConnection 连接,OdbcConnectionString constr,OdbcEnvironmentHandle environmentHandle)在 System.Data.Odbc.OdbcConnectionOpen..ctor(OdbcConnection outerConnection,OdbcConnectionString connectionOptions)在 System.Data.Odbc.OdbcConnectionFactory.CreateConnection(DbConnectionOptions 选项,DbConnectionPoolKey poolKey,对象 poolGroupProviderInfo , DbConnectionPool 池, DbConnection owningObject) 在 System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions 选项, DbConnectionPoolKey poolKey, 对象 poolGroupProviderInfo,DbConnectionPool 池,DbConnection owningConnection,DbConnectionOptions userOptions)在 System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection,DbConnectionPoolGroup poolGroup,DbConnectionOptions userOptions)在 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 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 分钟一次,它会工作不止一次,但是当足够长的时间让它停止工作时,一定会发生一些事情。
我很困惑问题是什么。我非常感谢任何帮助或建议尝试。