如何检查我尝试插入数据库中的值已存在

时间:2018-10-08 09:37:50

标签: c# sql sql-server

我有随机生成的条形码,这些条形码存储在数据库中。我需要检查要插入的条形码是否已经存在,如果存在,则需要生成其他条形码。

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();

3 个答案:

答案 0 :(得分:0)

尝试类似以下内容

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

由于您未提供数据库架构,因此我假设您可能使用条形码作为唯一键。

答案 1 :(得分:0)

首先,如果条形码必须唯一而不是对数据库进行唯一约束。

现在首先要回答这个问题,您必须问自己,系统将多久尝试插入一个已经存在的条形码。

如果这种情况只发生过几次,那么执行插入操作并从唯一约束中捕获异常会更有效。

如果很多情况发生,那么Update条码会更有效,如果由于不存在而失败,则将其插入。

因此,如果您知道条形码在大多数情况下都将存在,那么进行更新将在大多数情况下有效。这样一来,您的数据库调用将保持在最低限度,从而使其效率更高,因为在大多数情况下,您只需要对数据库进行一次调用

答案 2 :(得分:0)

首先初始化列表。

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
}