好吧,这可能是非常基本的东西,但我花了很长时间才弄明白。我想还有很多像我这样的 .NET 程序员,他们是 Monotouch 和 SQLite 的新手,他们不知道这一点。
我将 Ado.NET (System.Data) 与 Monotouch 和 SQLite 结合使用。在 SQLite 中,每个表的每一行都有一个 64 位有符号整数,称为 ROWID。您可以使用它,或者如果您愿意,您可以使用 INTEGER PRIMARY KEY AUTOINCREMENT 指定一个字段,SQLite 将链接到 ROWID。
但是如何在插入一条新记录后取回这个字段的值呢?类似于 SQL Server 中的 @@identity 关键字?
四处搜索我发现 SQLite 的 iOS c 库有一个方法 sqlite3_last_insert_rowid() 来检索它,但在 Mono.Data.Sqlite 中没有等效的方法。在旧的实现 (Mono.Data.SqliteClient) 中有一个 LastInsertRowID() 方法,但该方法在 Mono.Data.Sqlite 中消失了。为什么?
最佳答案
SQLite 有一些内部 core functions .其中一个函数是 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();";
关于sqlite - Monotouch 上的 Mono.Data.Sqlite : How to get the value of an autoincrement field after inserting a row?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4501165/