Плюсы и минусы ядра базы данных Access. Жизнь после SQLite - PullRequest
6 голосов
/ 25 марта 2009

Некоторое время назад я задал вопрос о том, какая локальная БД подходит для моей ситуации. Мне нужно было получить доступ к БД из кода .NET и VB6. Подавляющим ответом был SQLite. Однако я решил передать SQLite, потому что единственный поставщик OLE DB для него взимает лицензионные отчисления за каждую развернутую копию моего программного обеспечения. Также требуется, чтобы процедура активации выполнялась на каждом компьютере.

Оценив другие варианты (редакция SQL Server Compact - едва работающий поставщик OLE DB, Firebird - не нужно платить за другой драйвер и т. Д.), Я пришел к выводу, что единственный приемлемый выбор использует файлы .MDB, созданные Microsoft Access (или движком Jet).

Я не использовал его с конца 90-х годов, поэтому у меня есть следующие вопросы к тем, кто имеет опыт работы с ним.

  1. Решили ли они проблему, когда база данных время от времени повреждается.
  2. Доступ к MDB из c # осуществляется через ADO.NET OLEDB Provider или существует собственное решение (кажется, я не могу его найти).
  3. Существует ли жизнеспособная альтернатива действительно дрянному редактору SQL в Access?

Спасибо.

Ответы [ 7 ]

7 голосов
/ 25 марта 2009

Вместо того, чтобы вернуться к Access, я бы остановился на SQLite и использовал бы провайдер System.Data.SQLite для доступа к данным SQLite в коде .NET.

Тогда я просто создал бы простой класс .NET взаимодействия COM для использования VB6, который обертывает все необходимые функции доступа к данным SQLite. Наконец, просто укажите и используйте его как стандартный COM-объект из ваших проектов VB6.

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

5 голосов
/ 25 марта 2009

Рассматривали ли вы SQL Server 2008 Express Edition (в отличие от SQL Server CE)?

1) Лично я обнаружил, что в большинстве случаев это приводило к повреждению БД Access из-за кода, который не очищался сам по себе или в нем была задействована неисправная сетевая карта.

2)

string connectionString = @“Provider = Microsoft.Jet.OLEDB.4.0; " + 
                          @"Data Source = C:\data\northwind.mdb; " +
                          @"User Id = guest; Password = abc123”


using (OleDbConnection oleDbConnection = New OleDbConnection())
{
    oleDbConnection.ConnectionString = connectionString;

    oleDbConnection.Open();

    ...
}

3) SQL Server 2008 Express Edition

4 голосов
/ 25 марта 2009

Повреждение MDB происходит в основном из-за сбоев на клиентских машинах, файловых серверах и в сетях, когда база данных открыта. Если вы помещаете MDB в общий файловый ресурс, это всегда риск, если на локальном жестком диске, который используется одним пользователем, проблемы гораздо реже.

Я бы не ожидал, что SQLite будет каким-то другим, а во всяком случае хуже.

Периодически запускаемый JetComp.exe (загружаемый Microsoft) исправит многие проблемы и компактные таблицы индексов и тому подобное. Резервные копии важны независимо от того, что вы используете.

Вам вообще не нужен MS Access для использования Jet MDB. Существует несколько сторонних инструментов для проектирования схемы базы данных и выполнения интерактивных запросов, как из командной строки, так и из графического интерфейса.

2 голосов
/ 25 марта 2009

Поскольку формат MDB более или менее устарел, ваши знания о конце 90-х достаточно современны См. Эту страницу MSDN

1 голос
/ 24 июля 2009

Чтобы ответить на ваш вопрос относительно действительно дрянного редактора SQL в Access - я искренне согласен. Шрифт воняет, MSAccess всегда плохо форматирует запрос, иногда добавляет метасимволы, которые нарушают мой SQL, и, наконец, что хуже всего, если он не может проанализировать SQL, он не даст вам доступа к нему!

Мое решение - использовать внешний код. Я использую DAO для создания экземпляра MSAccess и затем могу напрямую редактировать запросы, используя коллекцию QueryDefs. Он позволяет вам делать большинство вещей - создавать, переименовывать, редактировать и т. Д. Однако есть несколько вещей, которые вы не можете сделать таким образом - например, у вас нет доступа к метаданным запроса (описание, скрытый и т. Д.).

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

1 голос
/ 26 марта 2009

AngryHacker спросил:

Q1. Решили ли они проблему, когда база данных время от времени повреждается.

Э-э, что?

Никогда не было проблем с коррупцией в правильно спроектированных приложениях, правильно развернутых в должным образом поддерживаемых средах. Я не видел испорченных MDB за 3 или 4 года, и у меня есть десятки моих приложений, которые постоянно используются в производственных целях многими клиентами во многих различных типах операционных сред.

Я думаю, что большинство людей, которые испытывают коррупцию, это те, кто пытается поделиться файлом MDB среди многих пользователей (независимо от того, разделены они или нет). Поскольку вы не рассматриваете возможность использования Access, на самом деле это не проблема.

Q2. Доступ к MDB из c # осуществляется через ADO.NET OLEDB Provider или есть нативное решение (кажется, я не могу его найти).

Нативным решением будет DAO, но это COM, так что вы можете не использовать его. С C # я бы сказал, OLEDB - ваш лучший выбор, но это не моя область знаний, так что попробуйте это с недоверием. Я полагаю, что Майкл Каплан сообщил, что поставщик Jet ADO / OLEDB является поточно-ориентированным, а DAO - нет. Это не значит, что он рекомендовал ADO / OLEDB вместо DAO, но его комментарии также были в контексте доступа, а не C #.

Q3. Есть ли жизнеспособная альтернатива действительно дрянному редактору SQL в Access?

Почему вы используете это, когда вы на самом деле не используете Access? Вы можете использовать любой понравившийся вам редактор SQL, если вы проверяете, что написанный вами SQL совместим с диалектом SQL Jet.

Я, например, не вижу, в чем проблема с редактором SQL Access (кроме невозможности установить размер шрифта), но затем я пишу большую часть своего SQL с использованием QBE и никогда не пишу даже посмотрите на представление SQL.

1 голос
/ 25 марта 2009

Вы также можете попробовать SQL Anywhere , он работает на разных ОС и имеет небольшой размер. У меня работает :) 1003 *

...