在将列表框中的项目插入MS Access数据库之前,先对其进行检查

时间:2018-06-26 04:14:57

标签: c#

如何避免MS Access数据库中的重复数据?

如果我的MS Access数据库中已经存在listbox1中的项目,并且该项目已经存在,如何检查该项目,然后继续执行下一个listbox1项目并检查该项目是否已存在。

private void button1_Click(object sender, EventArgs e)
{
        OleDbCommand cmd = new OleDbCommand("Insert into ASD (SerialNumber) values (@SerialNumber)", con);

        var parameter3 = new OleDbParameter("@SerialNumber", OleDbType.LongVarChar);
        parameter3.Value = textBox1.Text;
        cmd.Parameters.Add(parameter3);  
        con.Open();

        try
        {
            for (int a = 0; a < listBox1.Items.Count; a++)
            {
                OleDbDataAdapter da;
                DataTable dt = new DataTable();
                da = new OleDbDataAdapter("select * from ASD where SerialNumber = '"+listBox1.Text+"'", con);
                da.Fill(dt);

                if (dt.Rows.Count > 0)
                {
                    MessageBox.Show( "Serial Number Already Inserted!");
                    con.Close();
                }
                else
                {
                    for (int i = 0; i < listBox1.Items.Count; i++)
                    {                          
                        cmd.Parameters["@SerialNumber"].Value = listBox1.Items[i];                       
                    }

                    cmd.ExecuteNonQuery();
                    MessageBox.Show("Item Added");
                }              
            }

            con.Close();
        }
        catch (Exception x)
        {
            MessageBox.Show(x + "");
        }
}

1 个答案:

答案 0 :(得分:0)

通常,将数据库操作与业务逻辑和表示分开是一个好主意。一对一地处理问题。

要检查表中是否有项目,有几个选项。

SQL出现故障:在SerialNumber列上创建唯一索引。每当您尝试添加具有现有Seri​​alNumber值的新记录时,插入都会失败,并且会显示错误消息。我不推荐这种方法。

带有查询的SQL端:如果表中已存在此SerialNumber值,则在尝试插入新值之前,请对数据库运行查询。我不建议您使用它,因为它可以转换为很多SQL查询。

代码端:通过单个SQL查询获取内存中SerialNumber值的完整列表。对照此列表检查下一个值是否已在列表中。 如果记录数不太高,我会这样做。

如果记录数量很多,我将创建一个存储过程,并使用新记录的完整列表来调用它。该SP将在可能的情况下插入新记录,并返回失败的记录。