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

标签 c# sql-server csv

我有一个小程序可以将 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/

相关文章:

python - Pandas 无法识别 csv 文件中的日期时间索引

C#,如何简单地改变类成员的顺序

c# - 导航 QueryString 与 PhoneApplicationService.Current.State

mysql - 将 csv 导入 mysql 时忽略列上的前两个字符

sql-server - SQL Server Powershell错误:在此计算机上找不到Invoke-SqlCmd命令

sql - 如何计算一年中每个月的总金额?

java - 如何修改一个大的 json 字符串?

c# - 如果 "Utilities"类是邪恶的,我应该把我的通用代码放在哪里?

c# - 存储 ARKit 点云数据并检索显示

php - 使用 Microsoft Drivers for PHP for SQL Server 在 Ubuntu 16.04 上的 PHP 7.2 中连接到 SQL Server,在浏览器中工作,但在命令行中失败