轉載自:http://blog.csdn.net/baple/article/details/8131717 用ADOX創建ACCESS數據文件後,*.ldb文件出現,直到程式關閉後才消失。怎樣可以使那個*.ldb文件不出來呢?(具體它出來會有什麼壞處?我也沒細想,反正就是不想它出現。) Inter ...
轉載自:http://blog.csdn.net/baple/article/details/8131717
用ADOX創建ACCESS數據文件後,*.ldb文件出現,直到程式關閉後才消失。怎樣可以使那個*.ldb文件不出來呢?(具體它出來會有什麼壞處?我也沒細想,反正就是不想它出現。)
Interop.ADOX.dll應該是一個com組件,和.Net的不同,那個時代還沒有引入垃圾回收機制,沒有Dispose()……不能對ActiveConnection進行Dispose(),Catalog也是。
設ActiveConnection=null;Catalog=null;這樣看似銷毀,實際好像只是把指針設為null,而真正的對象,還沒有變化。
而在C#里ActiveConnection沒有Close()方法……
搜了半天,還是在一個日本網站首先見到解決方法的。可能是搜索方法不對吧。
最終將方法定位在這兩個語句上(單獨用其中一個不行,要兩個同時用):
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(catalog.ActiveConnection);
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(catalog);
using
ADOX;
// csc ... /r:Interop.ADOX.dll ...
// ... other code ...
public
bool
CreateDataFile()
{
ADOX.Catalog catalog =
new
Catalog();
try
{
catalog.Create(ConnString);
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(catalog.ActiveConnection);
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(catalog);
return
true
;
}
catch
(Exception ex)
{
Console.WriteLine(ex.Message);
return
false
;
}
}