C#海量SQL更新查询

3 c# sql

无处不在的场景:

我有一个180万行文本文件,我需要注入一个SQL表,我的代码工作正常,只是有点慢(如每天250k行).不幸的是,我有大约4个这样大小的文本文件,所以我需要一种方法来加快这个过程.任何帮助,将不胜感激.如果某些代码看起来不正确,那么我会省略一些隐私的东西.我知道我可以砍掉file.appendall,但我用它来跟踪它,我也做了明星++所以我可以在第二天拿起来不停止备份.

DirectoryInfo dinfo = new DirectoryInfo(ocrdirectory);
FileInfo[] Files = dinfo.GetFiles("*.txt");
foreach (FileInfo filex in Files)
{
        string[] primaryfix = File.ReadAllLines(dinfo + "\\" + filex);
        string filename = filex.ToString();
        string[] spltifilename = filename.Split('.');
        foreach (string primary in primaryfix)
        {
            string sqltable = ("dbo.amu_Textloadingarea");
            string sql = "update " + sqltable + 
                         " set [Text] = [Text] + '" + primary +"|"+ 
                         "' where unique = '" + spltifilename[0] + "'";
            File.AppendAllText(@"C:\convert\sqltest.txt", sql+"\n");
            SqlConnection con = new SqlConnection("Data Source= Cote ;Initial Catalog= eCASE;Integrated Security= SSPI");
            con.Open();
            SqlCommand cmd = new SqlCommand(sql, con);
            SqlDataReader reader = cmd.ExecuteReader();
            con.Close();
            Console.WriteLine(start);
            start++;
        }
Run Code Online (Sandbox Code Playgroud)

Pau*_*sik 7

我建议尝试一个预定的SSIS解决方案或bcp解决方案,而不是通过代码.

此外,通过查看您的代码,您已经构建了最低效率的代码.虽然你所拥有的将适用于应用程序,但它绝对不适合批量操作.你的问题:

  • 您正在使用每次循环迭代创建数据库对象,只需创建一次
  • 您每次都重新连接到数据库.这也需要做一次(每次会议)
  • 你需要打破这种方法......但是,这仍然不是最好的解决方案

正如我和其他人所提到的,你真的需要制定一个特殊的批量插入解决方案.

  • BCP是更好的选择. (2认同)