Плюсы и минусы Access database engine.Жизнь после SQLite

StackOverflow https://stackoverflow.com/questions/680399

  •  22-08-2019
  •  | 
  •  

Вопрос

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

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

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

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

Спасибо.

Это было полезно?

Решение

Вместо того, чтобы "возвращаться" к Access, я бы придерживался SQLite и использовал System.Data.SQLite provider для доступа к данным SQLite в .СЕТЕВОЙ код.

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

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

Другие советы

Рассматривали ли вы SQL Server 2008 Экспресс - версия (в отличие от 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 Экспресс-версия

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

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

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

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

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

Вы также могли бы попробовать SQL В любом месте он работает на различных ОС и занимает небольшую площадь.Работает у меня :)

Спросил сердитый Хакер:

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

Э-э, что?

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

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

Вопрос 2.Осуществляется ли доступ к MDB из c # через ADO.NET Поставщик OLEDB или есть собственное решение (кажется, я не могу его найти).

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top