ADO.net--SqlBulkCopy批量插入数据

一般情况下,我们在向数据库中插入数据时用Insert语句,但是当数据量很大的时候,这种情况就比较缓慢了,这个时候就需要SqlBulkCopy这个类。

SqlBulkCopy本身常用的函数有这么几个

DestinationTableName-----服务器目标表上的名称,也就是你要向哪个表插入大量的数据,这个就设置为那个表名

ColumnMappings-----字段映射,因为是要在本地建立一个Table,然后将整个Table一次性的加入到数据库中,因此需要将本地的Table的字段和数据库表中的字段做好映射关系

WriteToServer-----这个就是写入数据库了,不需要多说

导入的数据是传智播客免费视频上提供的手机号码归属地的信息,插入数据库看了一下,一共有258113条数据,用时大概6秒吧。

private void btnDR_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "文本文件|*.txt";
            if(ofd.ShowDialog()!=true)
            {
                return;
            }
            DateTime time = DateTime.Now;//计时,看看花了多长时间
            
            DataTable table = new DataTable();//本地创建一个临时表
            //给临时表添加列名
            table.Columns.Add("HD");
            table.Columns.Add("DQ");
            table.Columns.Add("LX");
            using(StreamReader streamReader=new StreamReader(ofd.FileName,Encoding.Default))//读取文件
            {
                while(!streamReader.EndOfStream)
                {
                    string[] stringStream = streamReader.ReadLine().Split(‘\t‘);//按行读取,通过\t进行分割,得到数组
                    string HD = stringStream[0].Trim(‘"‘);
                    string DQ = stringStream[1].Trim(‘"‘);
                    string LX = stringStream[2].Trim(‘"‘);
                    //将数据插入到本地创建的临时表里
                    DataRow row = table.NewRow();
                    row["HD"] = HD;
                    row["DQ"] = DQ;
                    row["LX"] = LX;
                    table.Rows.Add(row);
                }
            }
            //这部分就是从本地导入到数据库中
            using(SqlConnection conn=new SqlConnection("Data Source=.;Initial Catalog=imageprocess;Integrated Security=True"))
            {
                conn.Open();
                using(SqlBulkCopy bulkCopy=new SqlBulkCopy(conn))
                {
                    bulkCopy.DestinationTableName = "T_HM";
                    bulkCopy.ColumnMappings.Add("HD", "HD");//前面的参数是本地的临时Table列名,后面的参数是数据库的列名。两个名称不需要相同,我写相同,是为了方便
                    bulkCopy.ColumnMappings.Add("DQ", "DQ");
                    bulkCopy.ColumnMappings.Add("LX", "LX");
                    bulkCopy.WriteToServer(table);
                }
            }
            TimeSpan TS = DateTime.Now - time;
            MessageBox.Show(TS.ToString());           
        }
时间: 2024-08-11 12:20:16

ADO.net--SqlBulkCopy批量插入数据的相关文章

C#中的SqlBulkCopy批量插入数据

在C#中,我们可以使用sqlBulkCopy去批量插入数据,其他批量插入方法不在讨论. 1 /// <summary> 2 /// SqlBulkCopy批量插入数据 3 /// </summary> 4 /// <param name="connectionStr">链接字符串</param> 5 /// <param name="dataTableName">表名</param> 6 ///

SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法

原文:SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法 在new SqlBulkCopy对象的时候,设置一下SqlBulkCopyOptions选项即可,按位或运算 SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.CheckConstraints using (SqlBulkCopy bulkCopy = new SqlBulkCopy(GlobalString.ConnectionString, SqlBulkCopy

用SqlBulkCopy批量插入数据到SqlServer数据库表中

首先创建一个数据库连接类:SQLHelper using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; using System.Data; namespace insetData { public class SQLHelper { public static readonly string Strconn = "Data

使用事务和SqlBulkCopy批量插入数据

SqlBulkCopy是.NET Framework 2.0新增的类,位于命名空间System.Data.SqlClient下,主要提供把其他数据源的数据有效批量的加载到SQL Server表中的功能.类似与 Microsoft SQL Server 包中名为 bcp 的命令行应用程序.但是使用 SqlBulkCopy 类可以编写托管代码解决方案,性能上优于bcp命令行应用程序,更优于如Insert方式向SQL Server表加载大量数据.SqlBulkCopy可以应用到大批量数据的转移上,而不

用SqlBulkCopy实现批量插入数据

1.建立一张测试表 test CREATE TABLE test ( F_Name NVARCHAR(20) NULL, F_Age INT NULL ) 2.SqlBulkCopy批量插入数据 1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.Data.SqlClient; 5 using System.Data; 6 7 namespace sqlbulkcopy 8

ADO.NET 新特性之SqlBulkCopy(批量插入大量数据)

转自:http://blog.csdn.net/huaer1011/article/details/2312361 在.Net1.1中无论是对于批量插入整个DataTable中的所有数据到数据库中,还是进行不同数据源之间的迁移,都不是很方便.而在.Net2.0中,SQLClient命名空间下增加了几个新类帮助我们通过DataTable或DataReader批量迁移数据.数据源可以来自关系数据库或者XML文件,甚至WebService返回结果.其中最重要的一个类就是SqlBulkCopy类,使用它

.Net批量插入数据到SQLServer数据库,SqlBulkCopy类批量插入大数据到数据库

批量的的数据导入数据库中,尽量少的访问数据库,高性能的对数据库进行存储. 采用SqlBulkCopy来处理存储数据.SqlBulkCopy存储大批量的数据非常的高效,将内存中的数据表直接的一次性的存储到数据库中,而不需要一次一次的向数据库Insert数据. 经过几次实验,百万级别的数据表,也只需几秒时间内就可以完全的存入数据库中,其速度,比传统的Insert into方法不止快很多倍. 下面看代码: /// <summary> /// 批量插入数据 /// </summary> /

C#_批量插入数据到Sqlserver中的四种方式

先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的是GUID,表中没有创建任何索引.GUID必然是比自增长要快的,因为你生成一个GUID算法所花的时间肯定比你从数据表中重新查询上一条记录的ID的值然后再进行加1运算要少.而如果存在索引的情况下,每次插入记录都会进行索引重建,这是非常耗性能的.如果表中无可避免的存在索引,我们可以通过先删除索引,然后批量插入,最后再重建索引的方式来提高效率. create database CarSYS;    go    use CarSYS;  

SQL Server 批量插入数据的两种方法

在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Insert不仅效率低,而且会导致SQL一系统性能问题.下面介绍SQL Server支持的两种批量数据插入方法:Bulk和表值参数(Table-Valued Parameters). 运行下面的脚本,建立测试数据库和表值参数. [c-sharp] view plaincopy --Create DataBase create database BulkTestDB; go use BulkTes

sqlhelper(带sqlbulkcopy批量插入)

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using System.Data.SqlClient; namespace DataController{    static class SqlHelper    {        const int SQLTimeout = 120;        const string Connectio