一般情况下,我们手写sqlhelper类,在此类中定义一个数据插入到数据库的一个方法。将数据库连接密封在using()的语句中。using显示了Idispose接口。可以及时释放数据库连接资源。代码如下:

//以下为方法中语句

using(Sqlconnection conn=new Sqlconnection(constr))//"constr"为连接字符串

{

conn.Open();

using(SqlCommand cmd=conn.CreateCommand())

{

cmd.CommandText=sql;//"sql"为插入数据库操作语句

cmd.ExecuteNonquery();

}

}

但是这样的数据插入操作,面对大批量的数据插入时,所耗费的时间很长。有没有更好的方法能够实现数据的快速插入呢?

此时,微软早已为我们准备好了一个方法,可以实现数据的快速插入。

代码(我的项目的部分代码)如下:

string constr = "Data Source=.;Initial Catalog=ceshi;Integrated Security=true";
            using(SqlConnection conn=new SqlConnection(constr))
            {
                conn.Open();
                DateTime starttime = System.DateTime.Now;
                using(SqlCommand cmd=conn.CreateCommand())
                {
                    OpenFileDialog ofd = new OpenFileDialog();
                    ofd.Filter = "文本文件|*.txt";
                    if (ofd.ShowDialog() == false)
                    {
                        return;
                    }
                    string filename = ofd.FileName;
                    string[] lines = File.ReadLines(filename,Encoding.Default).ToArray();
                    DataTable table = new DataTable();
                    table.Columns.Add("tel_id");
                    table.Columns.Add("area");
                    table.Columns.Add("tel_type");
                    table.Columns.Add("area_tel");
                    for (int i = 1; i < lines.Count(); i++)
                    {
                        string line=lines[i];
                        string[] liness = line.Split('\t');
                        string tel_id = liness[0];
                        string area=liness[1];
                        string tel_type=liness[2];
                        string area_tel = liness[3];
                        DataRow row = table.NewRow();
                        row["tel_id"]=tel_id;
                        row["area"] = area;
                        row["tel_type"] = tel_type;
                        row["area_tel"] = area_tel;
                        table.Rows.Add(row);
                    }
                    using(SqlBulkCopy sbc=new SqlBulkCopy(constr))//SqlBulkCopy是大批量数据复制
                    {

//以下括号中的第二个参数是数据库中表的字段名
                        sbc.DestinationTableName = "Tel";
                        sbc.ColumnMappings.Add("tel_id","tel_id");
                        sbc.ColumnMappings.Add("area", "area");
                        sbc.ColumnMappings.Add("tel_type", "tel_type");
                        sbc.ColumnMappings.Add("area_tel", "area_tel");
                        sbc.WriteToServer(table);
                    }
                    DateTime endtime = System.DateTime.Now;
                    TimeSpan ts = endtime - starttime;
                    double hao = ts.TotalSeconds;
                    MessageBox.Show(hao.ToString());
                }
            }

有兴趣的朋友可以试一下哦!

SqlBulkCopy实现大容量数据快速插入数据库中的更多相关文章

  1. SqlBulkCopy将DataTable中的数据批量插入数据库中

    #region 使用SqlBulkCopy将DataTable中的数据批量插入数据库中 /// <summary> /// 注意:DataTable中的列需要与数据库表中的列完全一致.// ...

  2. 【hibernate spring data jpa】执行了save()方法 sql语句也执行了,但是数据并未插入数据库中

    执行了save()方法  sql语句也执行了,但是数据并未插入数据库中 解决方法: 是因为执行了save()方法,也执行了sql语句,但是因为使用的是 @Transactional 注解,不是手动去提 ...

  3. 多线程查询数据,将结果存入到redis中,最后批量从redis中取数据批量插入数据库中【我】

    多线程查询数据,将结果存入到redis中,最后批量从redis中取数据批量插入数据库中 package com.xxx.xx.reve.service; import java.util.ArrayL ...

  4. list转datatable,SqlBulkCopy将DataTable中的数据批量插入数据库

    /// <summary> /// 将泛类型集合List类转换成DataTable /// </summary> /// <param name="list&q ...

  5. mssqlServer大量数据快速插入:SqlBulkCopy

    SqlBulkCopy类,为微软的一个大量数据快速插入.直接上代码 表结构: namespace SqlBulkCopy的演示 { using System.Data.SqlClient; publi ...

  6. 把QQ聊天记录插入数据库中

    最近在做毕设,其中一个环节是分析qq聊天记录,在分析之前需要先把qq聊天记录导出,然后存入数据库中,qq聊天记录导出后是文本文档,导出方式: 1.登录qq后,点击任意一个好友,查看与他的聊天记录,点击 ...

  7. SQL SERVER 使用BULK Insert将txt文件中的数据批量插入表中(1)

    1/首先建立数据表 CREATE TABLE BasicMsg( RecvTime FLOAT NOT NULL , --接收时间,不存在时间相同的数据 AA INT NOT NULL, --24位地 ...

  8. 将Excel上千条数据写入到数据库中

    简要说明:因工作需要,需要一张Excel表格中的所有数据导入到数据库中.如下表,当然这只是一部分,一共一千多条. 前期处理: 首先要保证上图中的Excel表格中的数据不能为空,如果有为空的数据,可以稍 ...

  9. Android学习笔记——保存数据到SQL数据库中(Saving Data in SQL Databases)

    知识点: 1.使用SQL Helper创建数据库 2.数据的增删查改(PRDU:Put.Read.Delete.Update) 背景知识: 上篇文章学习了保存文件,今天学习的是保存数据到SQL数据库中 ...

随机推荐

  1. javascript的语法作用域你真的懂了吗

    原文:javascript的语法作用域你真的懂了吗 有段时间没有更新了,思绪一下子有点转不过来.正应了一句古话“一天不读书,无人看得出:一周不读书,开始会爆粗:一月不读书,智商输给猪.”.再加上周五晚 ...

  2. HTML5多图片拖拽上传带进度条

    前言 昨天利用css2的clip属性实现了网页进度条觉得还不错,但是很多情况下,我们在那些时候用进度条呢,一般网页加载的时候如果有需要可以用,那么问题就来了,怎么才算整个加载完毕呢,是页面主要模块加载 ...

  3. hdu 4864 Task(贪婪啊)

    主题链接:pid=4864">http://acm.hdu.edu.cn/showproblem.php?pid=4864 Task Time Limit: 4000/2000 MS ...

  4. php设计模式(二):结构模式

    上一篇我们介绍了设计模式的特性并且详细讲解了4种创建型模式,创建型模式是负责如何产生对象实例的,现在我们继续来给大家介绍结构型模式. 一.什么是结构型模式? 结构型模式是解析类和对象的内部结构和外部组 ...

  5. windows系统下c语言暂停程序

    原文:windows系统下c语言暂停程序 windows系统下,很多C语言初学者的调试时,往往没看到结果程序就退出了,据我所知的方法主要有以下几种 方法一: #include int main() { ...

  6. 如何将sqlserver表中的数据导出sql语句或生成insert into语句 [转]

    输入表名,生成插入语句 drop proc proc_insert //如果存在就删除 go create proc proc_insert (@tablename varchar(256)) as ...

  7. nexus私服linux搭建问题

    一.最近搭建nexus私服,从官网下载下来总是报503服务器无效,很是无奈,最后在网上找到一个可以用的 收藏起来,这里给大家共享一下 下载地址:http://pan.baidu.com/s/1kT3U ...

  8. SQL点滴26—常见T-SQL面试解析

    原文:SQL点滴26-常见T-SQL面试解析 它山之石可以攻玉,这一篇是读别人的博客后写下的,不是原原本本的转载,加入了自己的分析过程和演练.sql语句可以解决很多的复杂业务,避免过多的项目代码,下面 ...

  9. appserv+win8

    在win8系统安装appserv后,假设apache2服务不安装成功,在安装文件夹Apache2.2手动执行apache_servicefix.bat要么apache_serviceinstall.b ...

  10. 数以百万计美元的融资YO是什么东东?

    给自己做个广告哈,新栏目"面试"已经推出,回复"面试"就可以获取. 这两天最火的应用是什么.非yo莫属,堪称史上最简单的社交应用,仅仅能向好友发送一个yo. 出 ...