2011-04-27 109 views
0

有没有人曾经有过与ADOX库留下的文件句柄开放的烦恼吗?ADOX留下的文件句柄开放

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

我跟踪这个问题到“col.Properties(”自增“)。值”的呼叫。如果这行代码被注释掉了,那么当我在函数结束时关闭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连接,和猫是ADOX.Catalog对象。 col(从前)是与目录对象一起使用的ADOX.Column对象。

我本来想这个算法使用ADO.Net转换,并使用DataSet对象我接近,但无法弄清楚如何确定表列是否被设置为自动增量。这与Access 2000数据库顺便说一句。

回答

1

我刚刚被遗留下来的锁文件的问题创建一个使用ADOX数据库之后。确保连接已关闭,并且lockfile未被任何程序资源使用可能会有所帮助:

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