Проблемы, возникающие при использовании библиотеки System.Data.SQLite.DLL

И немного рекламы: винные шкафы kuppersbusch . скачать d3dx9 dll который лежит в папке system32

Каждый, кто только начинает работать с SQLite на C#, может столкнуться с несколькими проблемами использованием этой базы данных. Здесь я хочу остановиться на некоторых вопросах, которые я опустил при написании серии статей про dbFacade. Еще в первой статье я обещал описать варианты использования библиотеки System.Data.SQLite.dll, через которую класс dbFacade работает с базой данных. Так уж исторически сложилось, что в качестве провайдера я использую библиотеку System.Data.SQLite.dll.

Итак, для работы с SQLite на .NET вы подключаете библиотеку System.Data.SQLite.dll в References своего проекта. Если скачать архив SQLite-1.0.66.0-binaries.zip, то в ней вы обнаружите, фактически, три варианта библиотеки. Для работы вам также нужна будет оригинальная библиотека с официального сайта SQLite.org — sqlite3.dll.

Варианты подключения библиотеки и режимы компиляции

Первый вариант, и самый простой — System.Data.SQLite.DLL в корне архива. Эта библиотека откомпилирована под 32-битные системы (другими словами x86) и весит порядка 900 кб. В ней уже зашита sqlite3.dll. Поэтому вам не нужно качать оригинальную библиотеку. Достаточно подключить файл System.Data.SQLite.DLL и все работает.

Второй вариант — такая же библиотека, только для 64-битной платфоры. В нее, как и в предыдущую, вшита sqlite3.dll. Предназначена, как не трудно догадаться, для компиляции и работу под x64.

Третий вариант — версия библиотеки без вшитой sqlite3.dll под 32-битные системы (размер файла порядка 159 кб и находится в папке ManagedOnly). Дополнительно для работы программы рядом должна «лежать» sqlite3.dll. Преимущество этого варианта в том, что вы можете использовать самую последнюю версию sqlite3.dll. В предыдущие две вшиты версии 3.6.1. На данный момент доступна версия 3.7.6.2.

Теперь поговорим о боках, возникающих при использовании на различных типах операционных систем (32-х и 64-ти битных).

Представим что вы работаете в 32-битной системе: XP, Vista или Win7 — не важно. При компиляции вы можете использовать только первый и третий вариант подключения, а в настройках проекта вам доступны только два режима компиляции — ANY CPU и x86. В этом случае ваше приложение будет адекватно работать на 64-битных платформах.

Теперь представим, что вы «сидите» под 64-х битной виндой. В этом случае вы можете использовать все три возможности подключения и компилировать вашу программу как под 32-х, так и под 64-х битную платформу. Вот здесь и начинаются бока. Например, режим компиляции выставлен в ANY CPU и вы подключили библиотеку как описано в первом варианте.

В итоге, во время выполнения программы вы получаете ошибку:

или такую, если подключали как в третьем варианте

Это возникает потому что ваше приложении определяется системой при запуске как 64-х битное и соответственно все подключаемые библиотеки будут пытаться загружаться в 64-х битном режиме. А sqlite3.dll 32-х битное и другого не бывает. Соответственно из-за этого вы получаете ошибку.

Для того, чтобы ваше приложение работало адекватно как на 32-х, так и на 64-х битных системах — вам необходимо выставить режим компиляции в x86.

В таком режиме все будет работать.

Использование с .NET 4.0

Ситуация следующая: у вас приложение для .NET 4.0, подключена библиотека откомпилированная под Framework 2.0 (это System.Data.SQLite.DLL) и еще одна или несколько библиотек под Framework 4.0. System.Data.SQLite.DLL подключена как в первом варианте. При компиляции у вас может быть следующая ошибка:

В конфиг-файле приложения (app.config) вы находите следующие строки:

<startup>
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>

и меняете на:

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>

После этого ошибка пропадает и все работает нормально.

Как передавать NULL в поле DateTime

Вставка и обновление в классе dbFacade используется в связке с классом ParametersCollection. Чтобы вставить NULL в поле DateTime пишите так:

ParametersCollection parameters = new ParametersCollection();
parameters.Add("Название поля", SqlDateTime.Null, DbType.DateTime);
new dbFacade.Update("Название_таблицы", parameters, "id = 1");

Если у вас возникли вопросы или вы нашли ошибку, пишите, я всегда отвечу.

Популярность: 14%

Теги: ,

Если у вас возникли вопросы, вы можете оставить их в комментариях

Комментарии к статье

2 Ответов на “Проблемы, возникающие при использовании библиотеки System.Data.SQLite.DLL”

Оставить комментарий

(обязательно)

(обязательно)


 

MAXCACHE: 0.32MB/0.01867 sec