我想将大约1 gig的巨大.csv文件导入数据库.
我的应用程序在visual studio 2010中以c#编码.它在本地运行,不需要在网络上使用.
我尝试使用sql紧凑工具箱脚本仅导入25mb导致Visual Studio崩溃.
我尝试使用stringbuilder会导致内存不足异常(使用大约4 GB内存!)然后失败.
我尝试将这些文件导入Excel或Access,然后将它们转换为数据库也失败了.
哪些数据库可以更好地处理我的问题?
另外,我应该使用哪种方法尽可能快地导入它并将其加载到datagridview中?
谢谢你的帮助.
如果CSV文件没有包含逗号的任何字符串,则可以从SQL 执行直接BULK INSERT(如果是,则必须首先将分隔符更改为bar(|)字符.这是最直接的方法将数据从平面文件获取到数据库中,并且不需要任何中间程序,如SSIS或Excel
我经常使用它,它是从外部将数据导入SQL的最快速,最有效的方法.你的命令看起来像
BULK INSERT MyDatabase.dbo.MyTable
FROM MyFileName
DATAFILETYPE='char',
FIELDTERMINATOR=',',
BATCHSIZE=10000
Run Code Online (Sandbox Code Playgroud)
最常见的策略是将数据加载到工作表中,进行必要的清理/转换,然后将其插入到实际的目标表中.
如果你真的想用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
}
}
Run Code Online (Sandbox Code Playgroud)
SQL Express 和标准 SQL Server 都是您存储的良好选择。至于使用什么来导入数据,使用SSIS。在 SQL Express 或 Standard SQL Server 实例上创建数据库后,右键单击该数据库,在菜单Tasks项下您将看到Import Data. 它将引导您选择数据源(在您的情况下为 Excel),然后将其导入数据库。
然后,在该过程结束时,可以保存该脚本。