Как я могу удалить временный ldb файл Access Db - PullRequest
3 голосов
/ 19 июня 2009

У меня есть проект ASP.NET. Я подключаюсь к БД, а затем закрываю и удаляю объект подключения. Но когда кто-нибудь заходит на мой сайт, MS Access создает временный dbname.ldb. Когда я хочу загрузить свой оригинальный файл MDB с моего сервера, он не дает мне доступ к файлу MDB. Я ничего не могу сделать, если на сервере есть файл ldb. Он блокирует файл MDB, и я не могу его переместить. Так в чем проблема? Я открываю соединение и закрываю его. Так почему же этот файл ldb не удаляется после закрытия соединения?

Ответы [ 6 ]

5 голосов
/ 19 июня 2009

Ваше веб-приложение в IIS поддерживает соединение открытым с помощью пула соединений. Приложение IIS в конечном итоге закроется, если в течение времени, установленного IIS для прекращения работы вашего веб-приложения, больше не будет подключений или вы сможете перезапустить приложение (и скопировать файл до того, как кто-нибудь войдет).

Это только одна из причин, почему Access не является хорошим выбором базы данных для такого рода приложений.

2 голосов
/ 19 июня 2009

Вы также можете подумать о пуле соединений - когда вы закрываете соединение, c # фактически держит его открытым некоторое время (30 сек? 60 сек?), Прежде чем действительно закроет его, на случай, если повторно использовать. Это может быть проблемой.

2 голосов
/ 19 июня 2009

Файл .ldb является файлом блокировки для .mdb Доступ к базам данных. Каждый раз, когда вы открываете базу данных, двигатель Jet создает файл блокировки и сохраняет его открытым, пока кто-то подключен. Если к базе данных не подключены другие клиенты, Jet удаляет файл блокировки.

Итак, вы видите файл блокировки по одной из двух причин:

  • Существует открытое соединение.
  • Разорвано соединение, и файл блокировки не может быть удален.

Если проверка журналов ошибок вашего сервера ничего не дает, попробуйте зарегистрировать все обращения к базе данных из вашего приложения в файл: добавьте информацию о времени, подключении и другую полезную информацию отладки.
Это мог бы быть простой способ быстро отладить проблему и посмотреть, где и когда соединение остается открытым.

В качестве альтернативы вы можете взглянуть на эту статью CodeProject: Найти «утечки» соединений с базой данных в веб-приложениях ASP.NET .

2 голосов
/ 19 июня 2009

Соединение можно оставить открытым, если сценарии выдают ошибку любого типа, прежде чем закрыть его. Проверьте сценарии с настраиваемой страницей ошибок 500, которая регистрирует ошибки в текстовом файле, и вы увидите, так ли это. В любом случае, файл ldb не опасен, поэтому вы можете создать скрипт для его удаления раз в день или около того. Это один из недостатков работы веб-приложений с MS Access. Попробуйте выполнить миграцию на MSSQL, если это возможно, или на MySQL. Последний вариант можно использовать из .NET или классического ASP без проблем с ADO или ADO.NET с подходящим драйвером.

1 голос
/ 27 сентября 2013

Один хакерский обходной путь для удаления файла .ldb:

  • Сделать копию базы данных доступа
  • Удалить исходную базу данных доступа
  • Удалить файл .ldb
  • Переименуйте копию базы данных доступа в имя оригинальной.
0 голосов
/ 24 июня 2016

Вам необходимо вызвать GC.Collect () после закрытия и удаления объекта подключения:)

...