将dataGridView1里面批量数据插入sql数据库前去重复,防止主健报错,大概要求就是重复的数据抛出记录,不重复的数据插入,成功的加某列的内容+导入成功richTextbox显示成功,重复的也是这样,新手需要码。
插眼
大体思路是将dataGridView1里面的数据先进行去重,记录重复的数据,以及获取去重后的数据,然后主键以GUID或自增的方式,连接数据库进行循环插入操作。
//声明一个字典,用于记录去重后的数据
Dictionary<string, int> addDict = new Dictionary<string, int>();
//记录要删除掉的索引值
List<int> removeList = new List<int>();
//循环datagrid
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
//判断字典中存在了相同的值.就把当前的索引添加到待删除的记录中,这里判断的是Md5Code列
if (addDict.ContainsKey(dataGridView1.Rows[i].Cells[1].Value.ToString()))
{
removeList.Add(i);
}
else
{
//不存在就添加到字典中
addDict.Add(dataGridView1.Rows[i].Cells[1].Value.ToString(), i);
}
}
//循环要删除的数据,反向删除,否则索引会有问题
for (int j = removeList.Count - 1; j >= 0; j--)
{
//删除掉不用的行
dataGridView1.Rows.RemoveAt(removeList[j]);
//在这里可以记录删除掉的数据,并进行提示
}
removeList.Clear();
addDict.Clear();
//此时的dataGridView1就是去重后的数据,至于防止主键报错的话,不要在dataGridView1中操作主键,把主键设置成自增或者是GUID
//将dataGridView1的数据导入到SQL数据库中 ,声明数据库连接字符串
SqlConnection conn = new SqlConnection("server=yoti,6060; user id = sa; pwd = 2950001; database = hbposev9");
try
{
conn.Open();
for (int i = 0; i < this.dataGridView1.Rows.Count; i++)
{
SqlCommand comm = new SqlCommand();
string gdh = this.dataGridView1.Rows[i].Cells[0].Value.ToString().Trim();
string pn = this.dataGridView1.Rows[i].Cells[1].Value.ToString().Trim();
//这里是你的插入的sql语句
string id = Guid.NewGuid().ToString();//如果使用的是GUID,这样获取ID,如果是自增,注释掉
string SqlStr = "INSERT testbiao(sheet222,名称) VALUES ('" + gdh + "','" + pn + "')";
comm.CommandText = SqlStr;
comm.Connection = conn;
comm.ExecuteNonQuery();
}
}
catch (Exception ex)
{
MessageBox.Show("更新失败,失败原因:" + ex.Message);
}
finally
{
conn.Close();
}