zoukankan      html  css  js  c++  java
  • 大数据量.csv文件导入SQLServer数据库

          前几天拿到了一个400多M的.csv文件,在电脑上打开要好长时间,打开后里面的数据都是乱码。因此,做了一个先转码再导入数据库的程序。100多万条的数据转码+导入在本地电脑上花了4分钟,感觉效率还可以。各位网友有更好的方法,请在留言中指点下,一起学习,多谢了。

     1 static void Main(string[] args)
     2         {
     3             int count = 0;
     4             string readerPath=@"C:UsersAdministratorDesktop
    eaderDemo.csv";
     5             string writerPath=@"C:UsersAdministratorDesktopwriteDemo.csv";
     6             if (File.Exists(writerPath))
     7             {
     8                 File.Delete(writerPath);
     9             }
    10             using (StreamReader reader = new StreamReader(readerPath,Encoding.UTF8))
    11             {
    12                 while (!reader.EndOfStream)
    13                 {
    14                     string line = reader.ReadLine();
    15                     using (StreamWriter writer = new StreamWriter(writerPath, true,Encoding.Default))
    16                     {
    17                         writer.WriteLine(line);
    18                     }
    19                     count++;
    20                     Console.WriteLine("正在转码第{0}行,请稍等",count);
    21                 }
    22             }
    23             Console.WriteLine("转码完成,共转码{0}条数据",count);
    24             Console.WriteLine("开始导入数据,请稍等");
             //开始向数据库导入数据
    25 string sql = "BULK INSERT Test.dbo.BagDataTable FROM 'C:\Users\Administrator\Desktop\writeDemo.csv' WITH(FIELDTERMINATOR=',',BATCHSIZE=100000,FIRSTROW=2)"; 26 try 27 { 28 DbHelper.ExecuteSql(sql);//使用的是方法ExecuteNonQuery()方法,具体的Helper就不上传了。 29 } 30 catch(Exception ex) 31 { 32 using (StreamWriter writerLog = new StreamWriter(@"C:UsersAdministratorDesktopLog.txt")) 33 { 34 writerLog.WriteLine(ex.ToString()); 35 } 36 } 37 Console.WriteLine("数据导入完毕"); 38 Console.ReadKey(); 39 } 40 }
    Bulk Insert命令详细:
    http://blog.csdn.net/jackmacro/article/details/5959321/
    FIELDTERMINATOR表示csv文件中的结束符标志(csv默认列结束标志是,行结束标志是
    ),具体使用参看:
    http://www.cnblogs.com/sunice/p/6367332.html
  • 相关阅读:
    spoj1812 Longest Common Substring II( 后缀自动机 )
    SPOJ8222 Substrings( 后缀自动机 + dp )
    BZOJ 2882: 工艺( 后缀自动机 )
    NOIP2015酱油记
    NOIP2015前
    BZOJ 1088: [SCOI2005]扫雷Mine( )
    BZOJ 1261: [SCOI2006]zh_tree( 区间dp )
    HDU4027 Can you answer these queries? 线段树
    ZOJ3261 Connections in Galaxy War 并查集
    POJ 1773 Parity game 带权并查集
  • 原文地址:https://www.cnblogs.com/sunice/p/6371663.html
Copyright © 2011-2022 走看看