ADO.NET-插入多条记录(用SqlBulkCopy类)

来源:互联网 发布:电影英语台词软件 编辑:程序博客网 时间:2024/06/05 05:34

/// <summary>
        /// 批量复制
        /// </summary>
        /// <param name="connectionString">目标表的数据库连接字符串</param>
        /// <param name="sourceTable">原表</param>
        /// <param name="destinationTable">目标表名</param>
        public static void ExecuteBulkCopy(string connectionString, DataTable sourceTable, string destinationTable)
        {
            using (SqlConnection sqlconn = new SqlConnection(connectionString))
            {
                sqlconn.Open();
                using (SqlBulkCopy sbc = new SqlBulkCopy(sqlconn))
                {
                    sbc.BatchSize = 1000;
                    sbc.BulkCopyTimeout = 180;

                    //将DataTable表名作为待导入库中的目标表名  
                    sbc.DestinationTableName = destinationTable;

                    //将数据集合和目标服务器库表中的字段对应  
                    for (int i = 0; i < sourceTable.Columns.Count; i++)
                    {
                        //列映射定义数据源中的列和目标表中的列之间的关系
                        sbc.ColumnMappings.Add(sourceTable.Columns[i].ColumnName, sourceTable.Columns[i].ColumnName);
                    }

                    sbc.WriteToServer(sourceTable);
                }
                sqlconn.Close();
            }
        }

        /// <summary>
        /// 批量复制
        /// </summary>
        /// <param name="trans">事务</param>
        /// <param name="sourceTable">数据源</param>
        /// <param name="destinationTable">目标表名</param>
        public static void ExecuteBulkCopy(SqlTransaction trans, DataTable sourceTable, string destinationTable)
        {
            using (SqlBulkCopy sbc = new SqlBulkCopy(trans.Connection, SqlBulkCopyOptions.KeepIdentity, trans))
            {
                sbc.BatchSize = 1000;
                sbc.BulkCopyTimeout = 180;

                //将DataTable表名作为待导入库中的目标表名  
                sbc.DestinationTableName = destinationTable;

                //将数据集合和目标服务器库表中的字段对应  
                for (int i = 0; i < sourceTable.Columns.Count; i++)
                {
                    //列映射定义数据源中的列和目标表中的列之间的关系
                    sbc.ColumnMappings.Add(sourceTable.Columns[i].ColumnName, sourceTable.Columns[i].ColumnName);
                }

                sbc.WriteToServer(sourceTable);
            }
        }

原创粉丝点击