簡體   English   中英

如何檢查我嘗試插入數據庫中的值已存在

[英]How to check value that I am trying to insert in database already exists

我已經隨機生成了存儲在數據庫中的條形碼。 我需要檢查我要插入的條形碼是否已經存在,並且如果存在,我需要生成其他條形碼。

con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\PC\source\repos\WindowsFormsApp26\WindowsFormsApp26\Database1.mdf;Integrated Security=True");
con.Open();
cmd = new SqlCommand("INSERT INTO [Table1](press, date, barcode)  VALUES  ( '" + ardVrednost + "','" + DateTime.Now.ToString() + "','" + bar + "'   )", con);
cmd.ExecuteNonQuery();

試試下面的東西

cmd = new Sqlcommand($@"SELECT COUNT(1) FROM [Table1] WHERE barcode = {bar}",con);
var result = cmd.ExecuteReader();
if(result == "1"){ 
    //do generate new barcode
}

由於您不提供數據庫架構,因此我假設您可能使用條形碼作為唯一鍵。

首先,如果條形碼必須唯一,而不是對數據庫進行唯一約束。

現在首先要回答這個問題,您必須問自己,系統將多久嘗試插入一個已經存在的條形碼。

如果這種情況僅發生幾次,那么執行插入操作並從唯一約束中捕獲異常會更有效。

如果大量發生,則Update條形碼會更加有效,如果由於不存在而失敗,則將其插入。

因此,如果您知道條形碼在大多數情況下都將存在,那么執行更新在大多數情況下都可以。 因此,您的數據庫調用將保持在最低限度,從而使其效率更高,因為在大多數情況下,您只需要對數據庫進行一次調用

首先初始化列表。

List<string> list = new List<string>();

然后從數據庫中檢索所有條形碼值到列表中。

con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\PC\source\repos\WindowsFormsApp26\WindowsFormsApp26\Database1.mdf;Integrated Security=True");
con.Open();
cmd = new SqlCommand("SELECT press,date,barcode FROM [Table1])", con);
MySqlDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                list.Add(reader.GetString(2));
            }
            sqlconn.Close();

最后,只需匹配上面列表中的新條形碼,以查看其是否已存在於數據庫中。

If(list.Contains(barcode))
{
    //do not insert the value in the database
}
else
{
   //Your Insert query
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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