我写了一个.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分钟运行一次,它将不止一次工作,但是当有足够的时间停止工作时必须发生一些事情。
我对这个问题很困惑。我非常感谢您提供任何帮助或建议。
答案 0 :(得分:0)
我无法找到错误的地方。我相信这是4D ODBC驱动程序中的一个错误。我的工作是创建一个单独的控制台应用程序来处理4D部分。
我可以在需要时从服务启动此控制台应用程序作为新进程。这样,当它完成连接到4D的控制台应用程序从内存中卸载但服务可以继续运行时。
从内存中卸载程序似乎可以清除w / 4D的任何连接问题,并允许后续运行仍然有效。