Почему этот скрипт SQLite влияет на несколько строк? - PullRequest
0 голосов
/ 26 мая 2018

У меня есть следующий простой сценарий SQLite для создания новой базы данных с таблицей версий:

BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS `db_versions` (
    `version`   integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    `name`  varchar ( 50 ) DEFAULT NULL UNIQUE,
    `date_defined`  datetime DEFAULT NULL,
    `comments`  text
);
INSERT INTO `db_versions` VALUES (0,'initial-create','2017-12-02 14:41:56',NULL);
COMMIT;

Запуск этого сценария в браузере БД для журналов SQLite правильно регистрирует, что затрагивается только 1 строка (вставлена),Однако когда я пытаюсь выполнить этот сценарий в коде с Mono (Mono.Data.Sqlite), сценарий, по-видимому, затрагивает 2 строки.Вот этот код:

using (var conn = new SqliteConnection(_connStr)) {
    await conn.OpenAsync(cancellationToken);
      using (SqliteCommand comm = conn.CreateCommand()) {
          comm.CommandType = CommandType.Text;
          comm.CommandText = @"
              BEGIN TRANSACTION;
              CREATE TABLE IF NOT EXISTS `db_versions` (
                  `version` integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
                  `name`    varchar ( 50 ) DEFAULT NULL UNIQUE,
                  `date_defined`    datetime DEFAULT NULL,
                  `comments`    text
              );
              INSERT INTO `db_versions` VALUES (0,'initial-create','2017-12-02 14:41:56',NULL);
              COMMIT;
          ";
          int rowsAffected = await comm.ExecuteNonQueryAsync(cancellationToken);
          if (rowsAffected > 1) {
              // Why is this code running??
          }
      }
}

Кто-нибудь знает, почему я получаю такие разные результаты?

1 Ответ

0 голосов
/ 26 мая 2018

Гах, я разобрался.Было определено целое поле version AUTOINCREMENT, которое также добавляет наибольший ROWID к внутренней таблице sqlite_sequence.Так что было 2-й ряд добавляется.

...