2011-04-27 4 views
0

파일 핸들을 열어 두는 사람이 ADOX 라이브러리에 문제가 있습니까?ADOX에서 파일 핸들을 열어 두는 경우

VB6 -> VB.Net 변환에 이상한 문제가 있습니다. ADOX를 사용하여 주어진 데이터베이스의 테이블을 살펴보고 auto increment 속성이 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 연결하고, 고양이는 ADOX.Catalog 개체입니다 : 여기

내가 개체를 폐쇄하고 방법입니다. col (before에서)은 카탈로그 개체에 사용되는 ADOX.Column 개체입니다.

원래이 알고리즘을 ADO.Net을 사용하도록 변환하려고 시도했지만 DataSet 개체를 사용하여 닫을 수는 있지만 테이블 열이 자동 증가로 설정되었는지 확인하는 방법을 파악할 수 없었습니다. 이것은 Access 2000 데이터베이스 btw입니다.

답변

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 
관련 문제