Доступ к файлу базы данных не закрывается при его программном открытии в C#
Я новичок в этом. На самом деле, это первый раз, когда я задаю вопрос по stackru. Я сделал много поисков, но пока не смог найти ответ на этот вопрос. Вот суть того, что я пытаюсь сделать.
- Откройте файл базы данных доступа с помощью ADOX.
- Для всех не скрытых и несистемных таблиц в базе данных добавьте запись в свойство "текст проверки".
- Закройте файл базы данных доступа.
Вот что происходит с файлом.
- Файл блокировки *.ldb присутствует в папке, и это вызывает ошибку, что база данных открыта другим процессом.
Вот что я попробовал напрасно.
- Закройте таблицу, открытую на каждой итерации цикла foreach.
- Закройте класс каталога и объект сразу после цикла foreach.
- Удалите весь код внутри цикла foreach.
Вот что я планирую сделать.
Используйте Try Catch, чтобы поймать ошибку.
cn = new ADODB.Connection(); cat = new ADOX.CatalogClass(); cn.Open(tmpStr); cat.ActiveConnection = cn; //Loop through all tables to add the validation text foreach (Table t in cat.Tables) { tname = t.Name; ttype = t.Type == null ? string.Empty : t.Type; tprop = t.Properties["Jet OLEDB:Table Hidden In Access"].Value.ToString(); if (ttype.ToUpper() == "TABLE" && tprop.ToUpper() == "FALSE") // { t.Properties["Jet OLEDB:Table Validation Text"].Value = "this is table " + tname + " student1"; } //System.Runtime.InteropServices.Marshal.FinalReleaseComObject(t); } //Close all open objects System.Runtime.InteropServices.Marshal.FinalReleaseComObject(cat.Tables); System.Runtime.InteropServices.Marshal.FinalReleaseComObject(cat.ActiveConnection); System.Runtime.InteropServices.Marshal.FinalReleaseComObject(cat); GC.Collect();
Как вы думаете, что-то не так с тем, как я пытаюсь выполнить то, что я хотел бы сделать? Спасибо и хорошего дня.
1 ответ
Я долгое время не работал с ADODB, но в соответствии с тем, что я помню: вы должны закрыть соединение, GC.Collect() будет "в конечном итоге" собирать потерянные объекты, но я считаю, что вы должны использовать метод Close объекта Connection. https://msdn.microsoft.com/en-us/library/ms807027.aspx