如何避免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 + "");
}
}
答案 0 :(得分:0)
通常,将数据库操作与业务逻辑和表示分开是一个好主意。一对一地处理问题。
要检查表中是否有项目,有几个选项。
SQL出现故障:在SerialNumber列上创建唯一索引。每当您尝试添加具有现有SerialNumber值的新记录时,插入都会失败,并且会显示错误消息。我不推荐这种方法。
带有查询的SQL端:如果表中已存在此SerialNumber值,则在尝试插入新值之前,请对数据库运行查询。我不建议您使用它,因为它可以转换为很多SQL查询。
代码端:通过单个SQL查询获取内存中SerialNumber值的完整列表。对照此列表检查下一个值是否已在列表中。 如果记录数不太高,我会这样做。
如果记录数量很多,我将创建一个存储过程,并使用新记录的完整列表来调用它。该SP将在可能的情况下插入新记录,并返回失败的记录。