我有随机生成的条形码,这些条形码存储在数据库中。我需要检查要插入的条形码是否已经存在,如果存在,则需要生成其他条形码。
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();
答案 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
}