Как экспортировать запросы из базы данных ms-access и впоследствии закрыть процесс msaccess.exe? - PullRequest
0 голосов
/ 20 февраля 2020

Это код 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

1 Ответ

0 голосов
/ 20 февраля 2020

Мне пришлось установить все мои переменные на ноль и вызвать G C .Collect после этого. Вот код, который работал для меня:

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();
    item = null;
}
queryDefs = null;
db.Close();
db = null;

appClass.CloseCurrentDatabase();
appClass.Quit(AcQuitOption.acQuitSaveNone);
appClass = null;
GC.Collect();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...