批量加载数据到SQL数据表

时间:2021-12-03 12:16:19

/// <summary>
批量加载数据到SQL数据表        
/// 使用事务,将 DataTable 中的数据批量加载 SQL Server 表
批量加载数据到SQL数据表        
/// </summary>
批量加载数据到SQL数据表        
/// <param name="connStr">数据库连接字符串</param>
批量加载数据到SQL数据表        
/// <param name="batchSize">分批次拷贝的行数</param>
批量加载数据到SQL数据表        
/// <param name="destinationTableName">目标表名</param>
批量加载数据到SQL数据表        
/// <param name="sqlBulkCopyColumnMappings">目标表字段的映射</param>
批量加载数据到SQL数据表        
/// <param name="dt">包含数据的 DataTable 对象</param>
批量加载数据到SQL数据表        
/// <returns>布尔值</returns>

批量加载数据到SQL数据表        public static bool ExecuteSqlBulkCopy(string connStr, int batchSize, string destinationTableName, SqlBulkCopyColumnMapping[] sqlBulkCopyColumnMappings, DataTable dt)
批量加载数据到SQL数据表批量加载数据到SQL数据表        
{
批量加载数据到SQL数据表            
bool result = false;
批量加载数据到SQL数据表
批量加载数据到SQL数据表            
using (SqlConnection conn = new SqlConnection(connStr))
批量加载数据到SQL数据表批量加载数据到SQL数据表            
{
批量加载数据到SQL数据表                conn.Open();
批量加载数据到SQL数据表                
//定义SQL事务并嵌入到批量拷贝的工作中
批量加载数据到SQL数据表
                SqlTransaction _SqlTransaction = conn.BeginTransaction();
批量加载数据到SQL数据表
批量加载数据到SQL数据表                
//定义SqlBulkCopy:SqlConn为SqlConnection,SqlBulkCopyOptions枚举类型,objSqlTran为调用的事务
批量加载数据到SQL数据表
                using (SqlBulkCopy _SqlBulkCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.KeepIdentity, _SqlTransaction))
批量加载数据到SQL数据表批量加载数据到SQL数据表                
{
批量加载数据到SQL数据表                    
//分批次拷贝的行数
批量加载数据到SQL数据表
                    _SqlBulkCopy.BatchSize = batchSize;
批量加载数据到SQL数据表                    
//目标表名
批量加载数据到SQL数据表
                    _SqlBulkCopy.DestinationTableName = destinationTableName;
批量加载数据到SQL数据表
批量加载数据到SQL数据表                    
//源表对目标表字段的映射,因为默认是按顺序以及名字匹配,所以这步很重要
批量加载数据到SQL数据表
                    foreach (SqlBulkCopyColumnMapping _SqlBulkCopyColumnMapping in sqlBulkCopyColumnMappings)
批量加载数据到SQL数据表批量加载数据到SQL数据表                    
{
批量加载数据到SQL数据表                        _SqlBulkCopy.ColumnMappings.Add(_SqlBulkCopyColumnMapping.SourceColumn,
批量加载数据到SQL数据表                                                        _SqlBulkCopyColumnMapping.DestinationColumn);
批量加载数据到SQL数据表                    }

批量加载数据到SQL数据表
批量加载数据到SQL数据表                    
try
批量加载数据到SQL数据表批量加载数据到SQL数据表                    
{
批量加载数据到SQL数据表                        
//将DataTabel类型的objDT作为源拷贝到目标表
批量加载数据到SQL数据表
                        _SqlBulkCopy.WriteToServer(dt);
批量加载数据到SQL数据表                        _SqlTransaction.Commit();
批量加载数据到SQL数据表                        result 
= true;
批量加载数据到SQL数据表                    }

批量加载数据到SQL数据表                    
catch (Exception ex)
批量加载数据到SQL数据表批量加载数据到SQL数据表                    
{
批量加载数据到SQL数据表                        _SqlTransaction.Rollback();
批量加载数据到SQL数据表                        
throw ex;
批量加载数据到SQL数据表                    }

批量加载数据到SQL数据表                }

批量加载数据到SQL数据表            }

批量加载数据到SQL数据表
批量加载数据到SQL数据表            
return result;
批量加载数据到SQL数据表        }