RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

Ограничения ADO.NET SQLite Data Provider

Когда поставщики работают, у этого нет многих ограничений. У SQLite нет поддержки блокировки уровня строки или таблицы. Когда связь захватывает базу данных для записи, никакая другая связь или процесс не могут читать или писать базу данных, пока операция записи не завершена. Поставщик SQLite.NET пытается повторить внутренне, если база данных заблокирована, до значения свойства CommandTimeout рассматриваемой команды.

SQLite однозначно безтиповый и понимает только несколько основных типов данных Они (в.NET-терминах) Int64, Double, String и Blob. Провайдер SQLite.NET будет использовать информацию о схеме базы данных, которую это может подобрать, чтобы провести в жизнь типы, но это не точная наука.

Иерархические DataReaders не поддерживаются. В случае транзакций будет любой SQLiteCommand, созданный на связи (когда выполнено), автоматически присоединяется к происходящей транзакции, независимо от того, была ли она создана прежде или после команды.

Объекту SQLiteCommand можно повторно назначить новый объект SQLiteConnection, пока никакие DataReaders не активны по команде.

Открытие транзакции считают операцией записи, поэтому используйте их только когда вы хотите писать базу данных! Если вы будете держать открытыми транзакции постоянно, то все читатели на других связях будут заблокированы, пока транзакция не закрыта!

Поточная безопасность

Мультипоточность в SQLite должна быть сделана тщательно. Ограничения:

  • МожноClone() объект SQLiteConnection в одном потоке и передать клонированный объект к другому потоку. После того, как передан, другой поток становится новым владельцем клонированной связи, а оригинальный поток не должен держать ссылку на клона или вызывать любые методы на клоне.
  • Можно создать многократные потоки, причем они могут создать свой собственный SQLiteConnection и последующие объекты для доступа к базе данных. Многократные связи на многократных потоках к тому же самому файлу базы данных совершенно приемлемы и будут вести себя очевидно.
  • Нельзя вызвать методы или свойства или иначе сослаться на ни на какие классы поставщика SQLite, которые принадлежат другому потоку.
  • Нельзя передать SQLiteCommand, SQLiteDataReader, SQLiteDataAdapter или любой другой класс поставщика SQLite, кроме клонированного SQLiteConnection, другому потоку.

Поймите снова, что у SQLite нет мелкомодульных механизмов блокировки. Поэтому ваша собственная ответственность в многопоточной окружающей среде, чтобы обращаться с потенциальными тайм-аутами может произойти, если продолжительный запрос в одном потоке блокирует запрос в другом. Эти ситуации произойдут только, если один поток попытается читать в то время, как другой пытается писать. Какой бы поток не начал первым, остальные будут ждать пока не кочится значение свойства CommandTimeout или первый поток закончит работу.