Это код C#, который я использую для экспорта запросов из базы данных ms-access:
var appClass = new ApplicationClass();
appClass.Visible = false;
appClass.UserControl = false;
appClass.OpenCurrentDatabase(@"C:\RadLokal\trunk\Test\Access\Test.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-access остается открытым. Невозможно закрыть этот экземпляр вручную (через x). Это может быть закрыто только с диспетчером задач. Он закрывается автоматически, когда я закрываю хост-процесс.
Вещи, которые я пытался решить, мою проблему:
- Установите для базы данных значение null и вызовите G C .Collect впоследствии => без изменений
- строка комментария: File.WriteAllText: => без изменений
- установить для queryDefs значение null и вызвать G C .Collect () после этого => ms-access, похоже, закрывается но менеджер задач говорит иначе. Все еще существует открытый процесс msaccess.exe