Просто какой-то фон, извините, так долго наматывается.Обновление нескольких связанных таблиц в SQLite
Я использую адаптер System.Data.SQLite ADO.net для создания локальной базы данных sqlite, и это будет единственный процесс, поражающий базу данных, поэтому мне не нужно беспокоиться о параллелизме.
Я строю базу данных из разных источников и не хочу строить все это в памяти с помощью наборов данных или dataadapters или что-то в этом роде. Я хочу сделать это с помощью SQL (DdCommands). Я не очень хорошо разбираюсь в SQL и заполняю noob в sqlite. Я в основном использую sqlite в качестве локальной базы данных/сохранения файловой структуры.
В базе данных есть много связанных таблицы и данные не имеют ничего общего с людьми или регионами или районами, но использовать простую аналогию, представьте себе: стол
области с автоматическим приращением RegionId, колонками RegionName и различными необязательные столбцы.
района стол с автоматическим приращением DistrictID, DistrictName, RegionId и различными дополнительными столбцами
Person таблица с автоматическим приращением PersonId, PERSONNAME, DistrictID и различными дополнительными столбцами
Так я получаю некоторые данные, представляющие RegionName, AreaName, PersonName и другие данные, связанные с человеком. Регион, район и/или лицо могут или не могут быть созданы на данный момент.
Еще раз, не будучи самым большим с этим, мои мысли были бы что-то вроде:
- Проверьте, если регион существует, и если да, получить RegionId
- еще создать и получить RegionID
- Проверьте, существует ли район, и если да, то получите DistrictID
- иначе создайте его, добавив в RegionID сверху и получите DistrictID
- Проверить, существует ли человек, и если да, то получите PersonID
- еще создать его добавить в DistrictID сверху и получить PersonID
- Обновление лица с остальной информацией.
В MS SQL Server я бы создал хранимую процедуру для обработки всего этого.
Только способ, которым я могу это сделать, с помощью sqlite - это много команд. Поэтому я уверен, что этого не понимаю. Я потратил часы, оглядываясь по сторонам на разных сайтах, но просто не чувствую, что иду по правильной дороге. Любые предложения будут ценны.
Я сделаю снимок. Благодаря! – PerryJ
Это имело смысл, когда я читал ответ, но я не получаю то, что ожидаю сейчас, когда я пытаюсь использовать его в коде. Это близко, но все еще не совсем работает. Например, в таблице District, DistrictID и RegionID имеют одинаковые значения для каждой строки, а не RegionID, фактически соответствующие регионуID в таблице Region. То же самое в таблице Person. Кроме того, похоже, что каждое столкновение приводит к изменению первичного ключа. Если другие таблицы указывают на этот первичный ключ, я не вижу, как это может быть хорошо. – PerryJ
Я закончил тем, что объяснялось здесь: http://probertson.com/articles/2009/11/30/multi-table-insert-one-statement-air-sqlite/ – PerryJ