gpt4 book ai didi

c# - csv 导入 sqlserver 没有重复使用 c#

转载 作者:太空宇宙 更新时间:2023-11-03 21:08:17 24 4
gpt4 key购买 nike

我有一个小程序可以将 csv 文件导入到 sql server 数据库中但是当你按下按钮两次或其他东西时,它会添加重复项。我需要它,这样当有重复时它会跳过那个。如果有人可以帮助我编写代码,那就太棒了。

编辑:我注意到有人说我需要在按钮工作时禁用它,而这是解决一件事的方法我还希望如果数据库中已经有某些东西,当它相同时它会跳过那部分在数据库中的 csv 文件中。

代码:

private void button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"server=localhost;Initial Catalog=klantbestand;Integrated Security=SSPI;");
string filepath = @"C:\clients TEST.csv";

StreamReader sr = new StreamReader(filepath);

string line = sr.ReadLine();
string[] value = line.Split(';');
DataTable dt = new DataTable();
DataRow row;

foreach (string dc in value)
{
dt.Columns.Add(new DataColumn(dc));
}

while (!sr.EndOfStream)
{
value = sr.ReadLine().Split(';');
if (value.Length == dt.Columns.Count)
{
row = dt.NewRow();
row.ItemArray = value;
dt.Rows.Add(row);
}
}

SqlBulkCopy bc = new SqlBulkCopy(con.ConnectionString, SqlBulkCopyOptions.TableLock);
bc.DestinationTableName = "GegevensCSV";
bc.BatchSize = dt.Rows.Count;
con.Open();
bc.WriteToServer(dt);
bc.Close();
con.Close();
}

最佳答案

在将数据批量加载到数据库表时,我遵循的一般原则是创建一个新的暂存表(在导入期间只会临时存在),将所有数据批量加载到其中,然后运行查询将该数据迁移到最终目标表中。之后,只需删除暂存表即可。

这有几个好处:

  1. 你可以increase initial bulk loading performance进入 db/reduce 初始争用,而不影响使用目标表的其他进程(例如 SqlBulkCopyOptions .TableLock)
  2. 然后您可以在第二个迁移步骤中实现某些操作,例如不复制最终目标表中已存在的数据(如您所愿)

关于c# - csv 导入 sqlserver 没有重复使用 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39721821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com