OLE DB Provider для SQLite баз данных

Текущая версия провайдера 1.0.0.1.

Построена на SQLite версии 3.8.4.3
(SOURCE_ID 2014-04-03 16:53:12 a611fa96c4a848614efe899130359c9f6fb889c3).
sqlite-oledb.zipСкачать

Опции сборки SQLITE_ENABLE_COLUMN_METADATA и SQLITE_THREADSAFE=2.

Варианты сборки самого провайдера VC++ 2010, статический рантайм, статический ATL, платформы Win32 и x64.

ConnectionString: "Provider=SQLITEDB;Data Source=<имя/путь к файлу БД>"

Дата/время хранится в значениях с типом FLOAT, годном для функций, использующих julianday(). Провайдер их транслирует для консьюмера в классический DATE. Соответственно, при передаче параметров с типом DBTYPE_DATE, провайдер прибавляет к значению 2415018.5, а при чтении из БД колонок с подходящим типом, вычитает 2415018.5. Этот нюанс важно учитывать при построении запросов.

Провайдер использует следующую технику для определения типов колонок при выполнении запросов:

1. Для колонки вызывается sqlite3_column_decltype, если тип известен, то он анализируется следующим образом:
	a. "BLOB" или "IMAGE" – тип колонки (DBTYPE_BYTES | DBTYPE_BYREF) используется ISequentialStream*.
	b. “DATETIME” – тип колонки DBTYPE_DATE, предполагается что в БД дата/время лежит в формате FLOAT в виде Julian Day 
(используется корректировка в самом провайдере (double)2415018.5).
	c. "INTEGER" или "INT" – тип колонки DBTYPE_I8.
	d. "FLOAT" – тип колонки DBTYPE_R8.
	e. "TEXT" или "NVARCHAR" – тип колонки (DBTYPE_WSTR | DBTYPE_BYREF). Если после типа указана максимальная длина, она будет использована.
2. Если в п.1 тип установить не удалось, вызывается sqlite3_column_type, и тип анализируется следующим образом:
	a. SQLITE_INTEGER – DBTYPE_I8.
	b. SQLITE_FLOAT - Если имя колонки содержит строку “date” или “time”, тогда тип DBTYPE_DATE, в противном случае DBTYPE_R8.
	c. SQLITE_TEXT - (DBTYPE_WSTR | DBTYPE_BYREF). Информации о максимальной длине нет.
	d. SQLITE_BLOB – (DBTYPE_BYTES | DBTYPE_BYREF) используется ISequentialStream*.
	e. SQLITE_NULL – DBTYPE_VARIANT.