【问题标题】:How to dispose ADODB.Command object in code migrated to VB.NET如何在迁移到 VB.NET 的代码中处理 ADODB.Command 对象
【发布时间】:2014-04-18 12:06:12
【问题描述】:

我们将一些过时的代码从 VB6 迁移到 VB.net,之前的代码使用 ADODB 连接到 oracle。下面是代码的样子

Dim cmd As New ADODB.Command

' stored procedures execution here

cmd = Nothing    // I want to dispose this cmd Object 

Nothing 在 VB6 中工作,但它在 .NET 上造成了很多麻烦,数据库上有打开的游标。我知道我们应该使用最新的库并摆脱 ADODB,但现在有办法处理这个对象。我试过cmd.Dispose(),但没有奏效。

【问题讨论】:

  • “我试过 cmd.Dispose() 但没用。”,怎么没用?错误,异常?
  • ADODB 没有公开 Dispose() 方法
  • “最新库”?你知道你已经过时十多年了吗?只需从 ADODB 迁移到 ADO.NET,您就会发现生活变得轻松多了。见stackoverflow.com/search?q=adodb+ado.net
  • there is no Dispose() method exposed by ADODB 所以不是一次性物品,那有什么问题呢?
  • @JohnSaunders 我不是这个应用程序的所有者,这是很久以前某人编写的代码,我只是想在这里帮助某人。我知道 ADO.NET,但我不想跳入一些凌乱的过时代码

标签: .net vb.net vb6 adodb


【解决方案1】:

使用Marshal.ReleaseComObject 整理COM 对象。 ADODDB 是一个通过 COM Interop 使用的 COM 库。

通过 COM-Interop 使用的 COM 对象将具有Dispose 方法,但可能仍需要手动整理。与“正确”的 .Net 对象相比,可能具有 Dispose 方法,或实现 IDisposable

【讨论】:

  • MarkJ 谢谢我会试试
【解决方案2】:

在 VB.net(或 C#)中,应该释放的类应该包括 Dispose() 方法。不需要处理的类不应包含Dispose() 方法。

在您的情况下,Command 实例可能不需要被处置,但我敢打赌 Connection 实例(您没有包含在示例代码中,但我很确定您已经得到)确实。

【讨论】:

  • 通过 COM-Interop 使用的 COM 对象将没有 Dispose 方法,但可能仍需要手动整理。
猜你喜欢
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 2016-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
  • 1970-01-01
相关资源
最近更新 更多