【问题标题】:ADOX leaving file handles openADOX 使文件句柄保持打开状态
【发布时间】:2011-04-27 00:14:42
【问题描述】:

是否有人遇到过 ADOX 库让文件句柄处于打开状态的问题?

我在 VB6 -> VB.Net 转换中遇到了一个奇怪的问题。有一个函数使用 ADOX 来查看给定数据库中的表,并在自动增量属性设置为 true 的情况下重置所述表中任何列的种子值。

我将问题追溯到调用“col.Properties("Autoincrement").Value”。如果这行代码被注释掉,那么当我在函数末尾关闭 ADO 和 ADOX 连接时,文件句柄会正确终止。如果我留下那条线,尽管关闭调用并强制垃圾回收,句柄仍保持打开状态。

我是这样关闭对象的:

System.Runtime.InteropServices.Marshal.ReleaseComObject(adoConn)  
Dim connection As ADODB.Connection = cat.ActiveConnection  
If Not connection Is Nothing Then  
   connection.Close()  
End If  
cat.ActiveConnection = Nothing  
cat = Nothing  

adoConn 是 ADO 连接,cat 是 ADOX.Catalog 对象。 col(来自之前的)是与目录对象一起使用的 ADOX.Column 对象。

我最初尝试将此算法转换为使用 ADO.Net,并使用我接近的 DataSet 对象,但无法弄清楚如何确定表列是否设置为自动递增。顺便说一句,这是使用 Access 2000 数据库。

【问题讨论】:

    标签: .net vb.net ado adox


    【解决方案1】:

    我刚刚遇到了在使用 ADOX 创建数据库后遗留了一个锁定文件的问题。确保连接已关闭并且您的任何程序资源都没有使用锁定文件可能会有所帮助:

    System.Runtime.InteropServices.Marshal.ReleaseComObject(adoConn)
    
    Dim connection As ADODB.Connection = cat.ActiveConnection
    
    If Not connection Is Nothing Then
      connection.Close()   
    End If   
    
    'Try adding this below
    System.Runtime.InteropServices.Marshal.ReleaseComObject(connection)
    System.Runtime.InteropServices.Marshal.ReleaseComObject(cat)
    GC.Collect()
    
    cat.ActiveConnection = Nothing   
    cat = Nothing 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 1970-01-01
      • 2010-10-21
      • 2011-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多