0

我使用 Simple.Data 将数据插入 Sqlite 数据库。我在 wiki 上读到 Insert 返回插入的数据。我需要获取最新的 rowID(身份)。但是我得到了 Null 。

使用来自 NuGet 的稳定版。

var db = Database.OpenFile("Database.db");
var x = db.Scan.Insert(Name:"Test", Description:"test", CreationDate:DateTime.Now, DocumentDate:DateTime.Now, ModifiedDate:DateTime.Now);

数据库架构:

CREATE TABLE Scan ( 
    ID           INTEGER         PRIMARY KEY,
    Name         NVARCHAR( 50 )  NOT NULL,
    Description  TEXT,
    CreationDate DATETIME        NOT NULL,
    DocumentDate DATETIME        NOT NULL,
    ModifiedDate DATETIME        NOT NULL 
);

这甚至适用于 SQLite 吗?如果不是检索插入记录的 rowID 的最佳方法是什么?

4

1 回答 1

2

有同样的“问题”。问题出在您的架构中。

您必须将身份添加到您的主键列:

ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,

然后你回到该行,你可以用它创建一个新对象:

var x = db.Scan.Insert(Name:"Test", Description:"test", CreationDate:DateTime.Now, DocumentDate:DateTime.Now, ModifiedDate:DateTime.Now);
return new Scan { ID = (int)x.ID, Name = x.Name, ... }

来自维基:

如果您在表上定义了 IDENTITY 列,则 Insert 方法都将返回从数据库中获取的记录的副本,因此设置了所有默认值。在 0.4 中,将添加对其他获取插入行的方式的支持。

于 2014-07-29T13:40:41.190 回答