大数据量.csv文件导入SQLServer数据库

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

     static void Main(string[] args)
        {
            int count = 0;
            string readerPath=@"C:\Users\Administrator\Desktop\readerDemo.csv";
            string writerPath=@"C:\Users\Administrator\Desktop\writeDemo.csv";
            if (File.Exists(writerPath))
            {
                File.Delete(writerPath);
            }
            using (StreamReader reader = new StreamReader(readerPath,Encoding.UTF8))
            {
                while (!reader.EndOfStream)
                {
                    string line = reader.ReadLine();
                    using (StreamWriter writer = new StreamWriter(writerPath, true,Encoding.Default))
                    {
                        writer.WriteLine(line);
                    }
                    count++;
                    Console.WriteLine("正在转码第{0}行,请稍等",count);
                }
            }
            Console.WriteLine("转码完成,共转码{0}条数据",count);
            Console.WriteLine("开始导入数据,请稍等");
            string sql = "BULK INSERT Test.dbo.BagDataTable FROM ‘C:\\Users\\Administrator\\Desktop\\writeDemo.csv‘ WITH(FIELDTERMINATOR=‘,‘,BATCHSIZE=100000,FIRSTROW=2)";
            try
            {
                DbHelper.ExecuteSql(sql);
            }
            catch(Exception ex)
            {
                using (StreamWriter writerLog = new StreamWriter(@"C:\Users\Administrator\Desktop\Log.txt"))
                {
                    writerLog.WriteLine(ex.ToString());
                }
            }
            Console.WriteLine("数据导入完毕");
            Console.ReadKey();
        }
    }
Bulk Insert命令详细:http://blog.csdn.net/jackmacro/article/details/5959321/
FIELDTERMINATOR表示csv文件中的结束符标志(csv默认列结束标志是,行结束标志是\r\n),具体使用参看:http://www.cnblogs.com/sunice/p/6367332.html
 
时间: 2024-10-27 08:19:59

大数据量.csv文件导入SQLServer数据库的相关文章

MYSQL数据库导入大数据量sql文件失败的解决方案

1.在讨论这个问题之前首先介绍一下什么是"大数据量sql文件". 导出sql文件.选择数据库-----右击选择"转储SQL文件"-----选择"结构和数据"  .保存文件db_mras.sql文件. 2.导入sql文件.在MYSQL中新建数据库db_mras.选择数据库-----右击选择"运行SQL文件"-----选择文件db_mras.sql,运行. 现在发现运行失败,提示错误"MySQL server has g

使用OPENROWSET、Microsoft.ACE.OLEDB实现大数据量的高效导入

首先说明使用的环境是:java和Sqlserver. 最近公司需要进行大数据量的导入操作.原来使用的是Apache POI,虽然可以实现功能,但是因为逻辑处理中需要进行许多校验,处理速度太慢,使用多线程之后也不尽如人意.在网上搜索之后,找到了OPENROWSET和OPENDATASOURCE,发现使用OPENROWSET,可以非常快速的把Excel导入到数据库中.之后的各种校验,我可以通过编写sql来实现.最终结果是6w条数据可以在10秒内完成.当然数据量增加之后,完成时间并不会明显增加.这需要

大数据量下的SQL Server数据库自身优化 (转载)

1.1:增加次数据文件 从SQL SERVER 2005开始,数据库不默认生成NDF数据文件,一般情况下有一个主数据文件(MDF)就够了,但是有些大型的数据库,由于信息很多,而且查询频繁,所以为了提高查询速度,可以把一些表或者一些表中的部分记录分开存储在不同的数据文件里 由于CPU和内存的速度远大于硬盘的读写速度,所以可以把不同的数据文件放在不同的物理硬盘里,这样执行查询的时候,就可以让多个硬盘同时进行查询,以充分利用CPU和内存的性能,提高查询速度. 在这里详细介绍一下其写入的原理,数据文件(

大数据量高并发访问的数据库优化方法

一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. 在一个系统分析.设计阶段,因为数据量较小,负荷较低.我们往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性能则要花费更多的人力物力,而整个系统也不可避免的形成了一个打补丁工程. 所以在考虑整个系统的流程的时候,我们必须

将csv文件导入sql数据库

有一个csv文件需要导入到Sql数据库中,其格式为 "adb","dds","sdf" "adb","dds","sdf" ...... 先在sql数据库中建一个表,结构与csv文件相同(将数据,时间等都定义成nvarchar,否则出现错误). 然后执行: BULK INSERT [Order] FROM 'C:\abc.csv' WITH ( FIELDTERMINATOR = '&q

Java之利用openCsv将csv文件导入mysql数据库

前两天干活儿的时候有个需求,前台导入csv文件,后台要做接收处理,mysql数据库中,项目用的springboot+Vue+mybatisPlus实现,下面详细记录一下实现流程. 1.Controller层部分: /** * 读取csv文件,批量插入到数据库中 */ @RequestMapping("/importcsv") @RequiresPermissions("xxx:xxxxx:xxx") public R importCsv(@RequestParam(

小数据量csv文件数据导入数据库(思路)

大致写写思路,因为sqlserver提供了可以直接导入的图形界面. 1.private static string GetConnectionString(string folderPath)  //文件夹路径 { string [email protected]"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="[email protected]"\;Extended Properties='Text;'"; return

使用copy命令把csv文件导入postgres数据库

1. 把excel另存为csv 2. 使用txt打开csv格式 3. 以UTF-8格式编码,另存为blacklist20141231.csv 4. 创建一个表 Create table backlist_20141231(日期 varchar(20),手机号码 nvarchar(20),渠道 nvarchar(50)); 5. 使用copy命令,copy backlist_20141231 from 'd:/blacklist20141231.csv' delimiter as ',' csv

将csv格式的数据文件导入/导出数据库+添加新的字段

最近一直忙于实验室的事情,没有好好更新博客,在抓包的过程中,遇到了很多问题. 因为我常用Wireshark将抓包信息导出为csv文件,这里简单mark一下将csv文件导入/导出到数据库的2种方法: 一.简单,但是稍慢的方法,使用Navicat for MySQL,傻瓜式导入数据库: 流程如下: 安装完成并配置好连接后界面如下: 新建数据库 进入导入向导 选择导入类型: 然后选择文件作为数据源,这里是我之前抓好的包,300w+条抓包记录 这里直接采取默认设置 同样默认 自己设置了下表明,新建了表