[英]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.