2011-04-27 113 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