⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bulkcopy.cs

📁 我的一个Ado.Net一个框架设计
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace DAL
{
    public class BulkCopy
    {
        //禁止类进行实例化
        private BulkCopy()
        { 
        }
        /// <summary>
        /// 将一实例中的一个源表复制到另一个实例中的目的表,属于非事务方式进行,无法回滚;
        /// 如果源表和目标表处于同一个 SQL Server 实例中,请不要用次方法,应使用 Transact-SQL INSERT … SELECT 语句复制数据会更加容易、
        /// 更加迅速
        /// </summary>
        /// <param name="connSourceStr">源数据库的连接字符串</param>
        /// <param name="connDestinationStr">目的数据库的连接字符串</param>
        /// <param name="cmdText">对源数据库的选择操作命令</param>
        /// <param name="DestinationTableName">目的数据库的表名称</param>        
        public static void SingleCopy(string sourceString, string destinationString, string cmdText, string destTableName, int batchSize)
        {
            using (SqlConnection connSource = new SqlConnection(sourceString), connDest = new SqlConnection(destinationString))
            {
                SqlCommand cmd = new SqlCommand(cmdText, connSource);
                try
                {
                    if (connSource.State != ConnectionState.Open)
                        connSource.Open();                    
                    SqlDataReader reader = cmd.ExecuteReader();
                    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connDest))
                    {
                        bulkCopy.DestinationTableName = destTableName;
                        bulkCopy.BatchSize = batchSize;
                        if (connDest.State != ConnectionState.Open)
                            connDest.Open();
                        bulkCopy.WriteToServer(reader);
                        bulkCopy.Close();
                        connDest.Close();
                    }
                }
                catch (SqlException ex)
                {
                    throw ex;
                }
            }
        }
        /// <summary>
        /// 将一实例中的一个源表复制到另一个实例中的目的表,按照事务方式进行
        /// 由于不同批次在不同事务中执行,因此,如果在批量复制操作期间发生错误,则当前批次中的所有行都将被回滚,但以前批次中的行将保留在数据库中
        /// </summary>
        /// <param name="sourceString"></param>
        /// <param name="destinationString"></param>
        /// <param name="cmdText"></param>
        /// <param name="destTableName"></param>
        /// <param name="batchSize"></param>
        public static void TransCopy(string sourceString, string destString, string cmdText, string destTableName, int batchSize)
        {
            using (SqlConnection connSource = new SqlConnection(sourceString))
            {
                SqlCommand cmd = new SqlCommand(cmdText, connSource);
                try
                {
                    if (connSource.State != ConnectionState.Open)
                    {
                        connSource.Open();
                    }
                    SqlDataReader reader = cmd.ExecuteReader();

                    using (SqlConnection connDest = new SqlConnection(destString))
                    {
                        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destString, SqlBulkCopyOptions.KeepIdentity | SqlBulkCopyOptions.UseInternalTransaction))
                        {
                            bulkCopy.DestinationTableName = destTableName;
                            bulkCopy.BatchSize = batchSize;
                            if (connDest.State != ConnectionState.Open)
                                connDest.Open();
                            bulkCopy.WriteToServer(reader);
                            bulkCopy.Close();
                        }
                    }
                }
                catch (SqlException ex)
                {
                    throw ex;
                }
            }
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -