如何加快在 SQL 数据库 table 中插入文本文件的速度?

How can i speed up the insertion of a text file in an SQL database table?

我的文本文件是

Town 1, Street Address, Street number 1, Region 1, 125 07
Town 1, Street Address 12, Street number 1, Region 34, 141 07
Town 2, Street Address 345, Street number 1, Region 23, 190 07
Town 2, Street Address 233, Street number 1, Region , 190 11

我目前在 SQL 数据库 table 中执行以下插入操作。

 var fileContents = System.IO.File.ReadAllText(Server.MapPath(@"~/App_Data/zipcodes.txt"), Encoding.GetEncoding(1253));
 var Line = fileContents.Split(new string[] {"\n", "\r\n"}, StringSplitOptions.RemoveEmptyEntries);
 var Array = new string[5];
 foreach (string s in Line) 
     {
         Array = s.Split(',');
         storeDB.ZipCodes.Add(new ZipCodes {Town = Array[0], 
                                            StreetAddress = Array[1], 
                                            StreetNumber = Array[2], 
                                            Region = Array[3], 
                                            PostalCode = Array[4].Replace(" ", "")});
     }
     storeDB.SaveChanges();

由于文件包含50000多条记录,我想用另一种方式插入,更快。有什么建议吗?

您可以使用BULK INSERT

BULK INSERT db_name.schema.table 
FROM '...path .../zipcodes.txt' 
WITH ( 
     FIELDTERMINATOR = ',',
     ROWTERMINATOR = '\n' 
     );

如果需要,可以使用许多配置,例如 CODEPAGEFIRSTROW 等等...

SqlBulkCopy 是你要找的(它是特殊的 class 快速加载大量数据到 SQL 服务器):

using (SqlConnection cn = new SqlConnection(...))
{
      cn.Open();
      using (SqlBulkCopy copy = new SqlBulkCopy(cn))
      {
            copy.WriteToServer(dataTable);
      }
}

首先将您的 CSV 加载到 DataTable(这很简单)

http://www.codeproject.com/Tips/309564/SQL-Bulk-copy-method-to-insert-large-amount-of-dat