(作者:玛瑙河,转载请注明作者或出处,) 

 

问题情形:

通过Interop创建一个Access数据库并关闭该数据库和Access,然后打开新创建的数据库文件进行某些操作,但是发现无法打开第一步生成的文件,原因是文件锁没有释放。

解决方案:

在进行第二步操作前,强制垃圾收集,释放第一步过程中创建的COM对象。

 1 {
 2 
 3  ...//block A 创建一个数据库db
 4  
 5 }
 6 
 7 access.Quit() //关闭access
 8 
 9 System.Runtime.InteropServices.Marshal.ReleaseComObject(db)
10 System.GC.Collect();
11 System.GC.WaitForPendingFinalizers();
12 
13 {
14 
15  ...//block B, 打开block A中创建的数据库文件
16 
17 }
18 

 

如果没有9-11行的强制垃圾回收,那么在block B中打开block A中创建的数据库文件时,就会发生无法获得文件锁的情况,说明调用access.Quit并不能立即释放文件锁。

posted on 2010-06-13 11:24  玛瑙河  阅读(611)  评论(0)    收藏  举报