Mono.Data.Sqlite на Monotouch: Как получить значение поля автоинкремента после вставки строки? - PullRequest
5 голосов
/ 21 декабря 2010

Хорошо, это, вероятно, довольно простые вещи, но мне потребовалось довольно много времени, чтобы понять это.И я думаю, что есть намного больше программистов .NET, таких как я, новичок в Monotouch и SQLite, которые этого не знают.

Я использую Ado.NET (System.Data) с Monotouch и SQLite.В SQLite каждая строка каждой таблицы имеет 64-разрядное целое число со знаком, называемое ROWID.Вы можете использовать это, или, если хотите, можете указать поле с INTEGER PRIMARY KEY AUTOINCREMENT, которое SQLite будет связывать с ROWID.

Но как вы извлекаете значение этого поля после вставки новой записи?Что-то вроде ключевого слова @@ identity в Sql Server?

Обыскивая, я обнаружил, что c-библиотека для iOS SQLite имеет метод sqlite3_last_insert_rowid () для ее получения, но в Mono нет аналога этому.Data.Sqlite.В более старой реализации (Mono.Data.SqliteClient) был метод LastInsertRowID (), но этот метод исчез в Mono.Data.Sqlite.Почему?

1 Ответ

7 голосов
/ 15 апреля 2011

SQLite имеет некоторые внутренние основные функции .Одна из этих функций - last_insert_rowid ().Поэтому все, что вам нужно сделать, это выполнить команду «SELECT last_insert_rowid ()».Пример в Monotouch:

    public long GetLastInsertRowId(SqliteConnection connection)
    {
        // Assuming connection is an open connection from your INSERT
        using (SqliteCommand command = new SqliteCommand("SELECT last_insert_rowid()", connection))
        {
            return (long)command.ExecuteScalar();
        }
    }

Или вы можете комбинировать выбор с вашей вставкой, например:

string SqlCommand = "INSERT into Customers ([Name], .... [City]) VALUES (@Name, ... @City);SELECT last_insert_rowid();";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...