如何将巨大的.csv导入sql数据库

本文关键字:导入 sql 数据库 csv 巨大 | 更新日期: 2023-09-27 18:28:22

我想将大约1 gig的巨大.csv文件导入数据库。

我的应用程序是用visual studio 2010中的c#编写的。它正在本地运行,不需要在网络上使用。

我试图使用sql-compact工具箱脚本仅导入25mb,导致Visual Studio崩溃。

我尝试使用stringbuilder导致内存不足异常(使用了大约4GB的内存!),然后失败。

我试图将这些文件导入Excel或Access,然后将其转换为数据库,但也失败了。

以下哪个数据库可以更好地处理以解决我的问题?

  • SQL Express
  • SQL Compact
  • 本地SQL Server数据库

此外,我应该使用哪种方法来尽可能快地导入它,并更快地将它加载到数据网格视图中?

谢谢你的帮助。

如何将巨大的.csv导入sql数据库

如果CSV文件没有任何包含逗号的字符串,则可以从SQL直接执行BULK INSERT(如果是,则必须首先将分隔符更改为类似于条形(|)字符的字符。这是将数据从平面文件获取到数据库的最直接方法,不需要任何中间程序,如SSIS或Excel

我经常使用它,它是从外部将数据导入SQL的最快、最有效的方法。你的命令看起来像

BULK INSERT MyDatabase.dbo.MyTable 
      FROM MyFileName
           DATAFILETYPE='char',  
           FIELDTERMINATOR=',',
           BATCHSIZE=10000

最常见的策略是将数据加载到工作表中,进行任何必要的清理/转换,然后将其插入到实际的目标表中。

如果你真的想用C#实现这一点,你需要做的是逐行读取CSV,并在进入下一行之前插入它。

我有一个类似的情况,我必须读取2GB的"CSV"(选项卡分开)并加载到MSSQL中。以下是我的设置方式。

using (FileStream fs = new FileStream(@"C:'file.csv", FileMode.Open, FileAccess.Read, FileShare.None))
using (StreamReader sr = new StreamReader(fs, Encoding.GetEncoding(1252)))
{
    if (sr.ReadLine() == null) //Take this out if you don't have a header
    {
        throw new Exception("Empty file?!");
    }
    while (sr.Peek() >= 0)
    {
          String s = sr.ReadLine();
          //SPLIT
          //INSERT SQL
    }
}

SQL Express和标准SQL Server都是您的存储的理想选择。至于使用什么来导入数据,请使用SSIS。在SQL Express或Standard SQL Server实例上创建数据库后,右键单击该数据库,在Tasks菜单项下会看到Import Data选项。它将引导您选择数据源,在您的案例中是Excel,然后将其导入数据库。

然后,在该过程结束时,可以保存该脚本。

您可以在C#中使用SQLBulkImporter对象。工作起来很有魅力。