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;
            }
        }

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。