大數據量.csv文件導入SQLServer數據庫


      前幾天拿到了一個400多M的.csv文件,在電腦上打開要好長時間,打開后里面的數據都是亂碼。因此,做了一個先轉碼再導入數據庫的程序。100多萬條的數據轉碼+導入在本地電腦上花了4分鍾,感覺效率還可以。各位網友有更好的方法,請在留言中指點下,一起學習,多謝了。

 1 static void Main(string[] args)
 2         {
 3             int count = 0;
 4             string readerPath=@"C:\Users\Administrator\Desktop\readerDemo.csv";
 5             string writerPath=@"C:\Users\Administrator\Desktop\writeDemo.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:\Users\Administrator\Desktop\Log.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默認列結束標志是,行結束標志是\r\n),具體使用參看:
http://www.cnblogs.com/sunice/p/6367332.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM