0

有没有人遇到过 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 数据库。

4

1 回答 1

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 
于 2012-01-11T19:38:46.717 回答