(作者:玛瑙河,转载请注明作者或出处,
)
问题情形:
通过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
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并不能立即释放文件锁。
浙公网安备 33010602011771号