【问题标题】:Keeping ADODB connection open for a while保持 ADODB 连接打开一段时间
【发布时间】:2011-08-16 19:36:48
【问题描述】:

我在 ADO.Net 应用程序中与 SQL Server 的 ADO-DB 连接存在问题。 我在 Web 服务启动时打开连接,并在结束时关闭它。这意味着只要服务运行,连接就会打开。 我将连接传递给实际处理事务的 COM dll。 我现在面临一个问题,该命令执行一段时间后抛出异常,尽管之前相同的执行工作。但连接状态仅显示打开。 所以我们必须关闭连接并打开它并重试事务。这样它就可以工作了。 但我想知道根本原因,这是一个实际的解决方案。 还有一件事,我们现在只有一个客户。

【问题讨论】:

  • 你有什么例外?服务启动时打开连接是什么意思?您的意思是每个请求打开连接还是在应用程序的整个生命周期中只打开一次? COM 组件对连接有什么作用?改进您的问题,因为您错过了非常重要的细节。
  • 来自 C++(COM dll) 的异常只是 E_FAIL。当我在 .Net 中测试相同的东西时,异常是“连接失败”。当我的 web 服务启动时,我正在打开连接。(仅适用于应用程序的整个生命周期)。COM 组件是实际执行所有事务的组件。连接对象被传递给 COM 组件。

标签: .net web-services interop com-interop adodb


【解决方案1】:

在应用程序的整个生命周期内保持连接打开是一种不好的做法。连接可能会超时,可能会出现一些网络问题等。连接可能会失败并且无法避免 - 您必须捕获异常并以某种方式处理它。此外,这也不允许您同时处理多个请求,因为在单个连接上不能有两个并发事务。

正确的方法是为每个 Web 服务请求创建一个新连接。 .NET 默认使用连接池,因此对性能的影响非常小。

【讨论】:

  • C#.Net中ADODB.Connection是否默认提供连接池?
  • 如何创建连接?在您的问题中显示一些代码。是 .NET 连接还是一些互操作?
  • 创建连接如下
  • ADODB.Connection connection = new ADODB.Connection();我们正在将此连接传递给 C++ COM dll,它会接受一个 IUnknown。所有 Db 操作都通过 ADO 命令和记录集对象完成在 C++ 中。在这有什么方法可以使连接池无效。
猜你喜欢
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-21
  • 2023-04-06
相关资源
最近更新 更多