如何从msaccess数据库导出查询,然后关闭msaccess.exe-process



这是我用来从ms访问数据库导出查询的C#代码:

var appClass = new ApplicationClass();
appClass.Visible = false;
appClass.UserControl = false;
appClass.OpenCurrentDatabase(@"C:RadLokaltrunkTestAccessTest.accdb", false, "");
var db = appClass.CurrentDb();
var queryDefs = db.QueryDefs;
for (int i = 0; i < queryDefs.Count; i++)
{
var item = queryDefs[i];
const string QueryPrefix = "Query_";
var filename = Path.Combine(@"c:Temp", QueryPrefix + item.Name + ".txt");
File.WriteAllText(filename, item.SQL);
item.Close();
}
db.Close();
appClass.CloseCurrentDatabase();
appClass.Quit(AcQuitOptionWrapper.acQuitSaveNone);  

将打开数据库,并导出所有查询。但非常规地,一个空的ms访问实例保持打开状态。无法手动关闭此实例(通过x(。它只能通过任务管理器关闭。当我关闭主机进程时,它会自动关闭。

我试图解决我的问题:

  • 将db设置为null并调用GC。之后收集=>没有更改
  • 注释行:File.WriteAllText:=>无更改
  • 将queryDefs设置为null,然后调用GC.Collect((=>ms访问似乎关闭了,但任务管理器说不是这样。仍有一个打开的msaccess.exe进程

我不得不将所有变量设置为null,然后调用GC.Collect。这是对我有效的代码:

var appClass = new ApplicationClass();
appClass.Visible = false;
appClass.UserControl = false;
appClass.OpenCurrentDatabase(@"C:RadLokaltrunkTestAccessTest.accdb", false, "");
var db = appClass.CurrentDb();
var queryDefs = db.QueryDefs;
for (int i = 0; i < queryDefs.Count; i++)
{
var item = queryDefs[i];
const string QueryPrefix = "Query_";
var filename = Path.Combine(@"c:Temp", QueryPrefix + item.Name + ".txt");
File.WriteAllText(filename, item.SQL);
item.Close();
item = null;
}
queryDefs = null;
db.Close();
db = null;
appClass.CloseCurrentDatabase();
appClass.Quit(AcQuitOption.acQuitSaveNone);
appClass = null;
GC.Collect();

相关内容

最新更新