SqlBulkCopy 类

1.SqlBulkCopy 简介 

Microsoft SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具,用于将数据从一个表移动到另一个表(表既可以在同一个服务器上,也可以在不同服务器上)。SqlBulkCopy 类允许编写提供类似功能的托管代码解决方案。还有其他将数据加载到 SQL Server 表的方法(例如 INSERT 语句),但相比之下 SqlBulkCopy 提供明显的性能优势。

使用 SqlBulkCopy 类只能向 SQL Server 表写入数据。但是,数据源不限于 SQL Server;可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataReader 实例读取数据。

2.SqlBulkCopy 属性

3.SqlBulkCopy 方法

4.SqlBulkCopy 示例

  public bool ExecuteSqlBulkCopy()
        {
            string _strConn = "";
            string _sqlTableName = "T_User";    //服务器表名

            DataTable _table = new DataTable(); //映射表
            _table.Columns.Add("uName");
            _table.Columns.Add("uAge");

            //填充数据
            for (int i = 0; i < 3; i++)
            {
                DataRow _row = _table.NewRow();
                _row["uName"] = "姓名" + i;
                _row["uAge"] = "年龄" + i;
            }

            try
            {
                using (SqlConnection conn = new SqlConnection(_strConn))
                {
                    conn.Open();
                    using (SqlTransaction tran = conn.BeginTransaction())
                    {
                        using (SqlBulkCopy sbc = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, tran))
                        {
                            sbc.BatchSize = 500;  //每一批次中的行数,每一批次结束时,让该批次中的行发送到服务器
                            sbc.BulkCopyTimeout = 600; //超时之前操作完成所允许的秒数
                            sbc.DestinationTableName = _sqlTableName;//服务器上的表名称

                            //映射表和服务器表做关联映射
                            foreach (DataColumn col in _table.Columns)
                            {
                                sbc.ColumnMappings.Add(col.ColumnName, col.ColumnName);
                            }
                            //复制数据
                            sbc.WriteToServer(_table);
                            //提交事物
                            tran.Commit();
                            return true;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return false;
            }
        }
时间: 2024-10-11 06:53:05

SqlBulkCopy 类的相关文章

使用SqlBulkCopy类来批量复制数据

DataTable dt = new DataTable(); dt.Columns.Add("id", typeof(string)); for (int i = 0; i < 100; i++) { DataRow dr = dt.NewRow(); dr["id"] = "sadf" + i; dt.Rows.Add(dr); } using (SqlConnection conn = new SqlConnection(@"

SqlBulkCopy类进行大数据(10000万条以上)插入测试

好多天没写博客了,刚刚毕业一个多月,在IT的路上真是迷茫啊! 关于上一篇博客中提到的,在进行批量数据插入数据库的时候可以通过给存储过程传递一个类型为Table的参数进行相关操作,在这个过程中本人没有进行效率的测试.后来查找发现可以通过SqlBulkCopy类进行大数据插入操作,本文就来介绍一个这个类的作用并做了相关的效率测试(与Insert语句进行对比). SqlBulkCopy只能向SqlServer表写入数据,该表既可以是同一个服务器上的也可以是远程服务器上的.当然要写入的数据即数据源不单单

使用asp.net 2.0中的SqlBulkCopy类批量复制数据

介绍:在软件开发中,把数据从一个地方复制到另一个地方是一个普遍的应用. 在很多不同的场合都会执行这个操作,包括旧系统到新系统的移植,从不同的数据库备份数据和收集数据. ASP.NET 2.0有一个SqlBulkCopy类,它可以帮助你从不同的数据源复制数据到SQL SERVER数据库. 本文中我将示范SqlBulkCopy类的不同应用. 数据库设计: 这个数据库的设计还是蛮简单的,它基于Northwind数据库的Products表.另外我还在Northwind数据库中创建了3个表. 详情可以看一

C# 使用SqlBulkCopy类批量复制大数据

特别注意  sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName); 插入的时候列的顺序可以不一致,但名称和数据类型最好要保存一致.不一致时候,也能进行正确的转换,除了比如DataTime数据类型,不能插入一个无效的string时间字符串. 本文转载:http://zhoufoxcn.blog.51cto.com/792419/166052 参考http://www.cnblogs.co

C# 使用 SqlBulkCopy 类批量复制数据到数据库

最近公司需要优化导入的问题,由于之前使用的方式是生成 Insert 语句插入数据库,数据量小的时候还行,但是随着发展数据量渐渐大了,之前的方法性能就跟不上了,于是发现了 SqlBulkCopy 这个类. 使用 SqlBulkCopy 类只能向 SQL Server 表写入数据.但是,数据源不限于 SQL Server:可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataReader 实例读取数据. public class Conn { private static

使用SqlBulkCopy类实现导入Excel表格

对于C#Execl数据的导入导出大家不感到陌生,这是一个项目中经常回遇到的功能,今天在这里讲的事,使用SqlBulkCopy类实现导入Excel大批量的数据导入. /// <summary> /// 数据库对应表 /// </summary> /// <returns></returns> private static DataTable GetDeliveryOrderTable() { DataTable dt = new DataTable(); dt

在asp.net 2.0中使用SqlBulkCopy类迁移数据

在asp.net 2.0中使用SqlBulkCopy类迁移数据 (转) http://jackyrong.cnblogs.com/archive/2005/08/29/225521.html 我们经常要在一个表中将数据迁移到另一个表,当然,用的方法十分多了.在.net 2.0中,提供了一个sqlbulkcopy类,也可以实现如下的操作,下面简单介绍下.比如一个表如下CREATE TABLE Person3( PersonID int IDENTITY(1,1) PRIMARY KEY, Name

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

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

使用SqlBulkCopy类批量复制大数据

1 using System; 2 using System.Configuration; 3 using System.Data; 4 using System.Data.SqlClient; 5 using System.Diagnostics; 6 7 namespace SqlBulkCopy1 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 Stopwatch sw = new Stopwatch(