[英]Using a Kendo Grid to create a new record inline how do I update the Key ID for the new record?
[英]How do I append a new id to record
我有一个问题,基本上我希望数据库中的 id 自动递增并添加更多用户,但是当我尝试添加第二条记录时,它会抛出一个错误,例如:
constraint failed
Unique constraint failed: DANE.id
这是我的插入方法:
private void LoadToDb_Click(object sender, EventArgs e)
{
var modelData = new Data();
var db = new SqlDb();
var sqLiteConnection = db.Connect();
var sqLiteCommand = sqLiteConnection.CreateCommand();
try
{
modelData.Name = firstName.Text;
modelData.Age = Convert.ToInt32(DisplayAge.Text);
modelData.LastName = LastName.Text;
sqLiteCommand.CommandText =
$"insert into DANE values('{modelData.Name}', '{modelData.LastName}', '{modelData.Age}', {Interlocked.Increment(ref modelData.Id)})";
sqLiteCommand.ExecuteNonQuery();
db.Disconnect();
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
}
}
这是我的数据模型
public class Data
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public int id = 0;
}
这是 sqLite 数据库模式(我为此使用 db 浏览器)
CREATE TABLE "DANE" (
"FirstName" TEXT NOT NULL,
"LastName" TEXT NOT NULL,
"Age" INTEGER NOT NULL,
"id" INTEGER NOT NULL,
PRIMARY KEY("id" AUTOINCREMENT)
);
您使用 Data.Id 作为主键,但每次都创建一个新实例。 因此,您的主键将始终为 1(创建新实例后立即为 0,然后在调用 Interlocked.Increment 时为 1,顺便说一句,可能不需要)。
此外,您正在代码和数据库中生成主键。 选择您喜欢的一种,无需特意去做。
您的表定义为"id" INTEGER NOT NULL, PRIMARY KEY("id" AUTOINCREMENT)
所以,你的插入需要像
$"insert into DANE (FirstName, LastName, Age)
values('{modelData.Name}', '{modelData.LastName}', '{modelData.Age}')";
基本上,您不会在INSERT
列出自动增量列。 但是您需要根据 SqlLite 特定的数据库语法和提供程序功能检索插入的记录值。 每个数据库引擎及其 .NET 提供程序都有自己的方法。
提示: SQLiteConnection.LastInsertRowId
像这样定义表格:
CREATE TABLE "DANE" (`enter code here`
"id" INTEGER NOT NULL AUTO_INCREMENT,
"FirstName" TEXT NOT NULL,
"LastName" TEXT NOT NULL,
"Age" INTEGER NOT NULL,
);
或者
var NewID = DB.DANE.Max(x => x.id) + 1;
然后在插入查询中添加 NewID 作为 id。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.