簡體   English   中英

我如何附加一個新的 id 來記錄

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM