使用事务和SqlBulkCopy导入大批量数据

 

使用事务和SqlBulkCopy导入大批量数据

 

使用事务和SqlBulkCopy导入大批量数据
个人测试所用。调用请修改。

    
    
/// <summary> /// 使用事务和SqlBulkCopy批量导入数据 示例 /// By Conan304 2009年8月29日21:51:02 /// </summary> /// <param name="phone"></param> /// <param name="smsInfo"></param> private static void SqlBulkCopyData( string [] phone, string smsInfo) { if (phone == null ) return ; // 生成DataTable DataTable dataTable = new DataTable(); DataColumn column = new DataColumn(); // qy_id column.DataType = System.Type.GetType( " System.Int32 " ); column.ColumnName = " QY_ID " ; dataTable.Columns.Add(column); // Info_ID column = new DataColumn(); column.DataType = System.Type.GetType( " System.String " ); column.MaxLength = 32 ; column.ColumnName = " Info_ID " ; dataTable.Columns.Add(column); // SP_Port column = new DataColumn(); column.DataType = System.Type.GetType( " System.String " ); column.MaxLength = 24 ; column.ColumnName = " SP_Port " ; dataTable.Columns.Add(column); // Phone column = new DataColumn(); column.DataType = System.Type.GetType( " System.String " ); column.MaxLength = 11 ; column.ColumnName = " Phone " ; dataTable.Columns.Add(column); // Content column = new DataColumn(); column.DataType = System.Type.GetType( " System.String " ); column.MaxLength = 300 ; column.ColumnName = " Content " ; dataTable.Columns.Add(column); // SendTime column = new DataColumn(); column.DataType = System.Type.GetType( " System.DateTime " ); column.ColumnName = " SendTime " ; column.DefaultValue = DateTime.Now; dataTable.Columns.Add(column); // SendLevel column = new DataColumn(); column.DataType = System.Type.GetType( " System.Int32 " ); column.ColumnName = " SendLevel " ; column.DefaultValue = 4 ; dataTable.Columns.Add(column); // IsLong column = new DataColumn(); column.DataType = System.Type.GetType( " System.Int32 " ); column.ColumnName = " IsLong " ; dataTable.Columns.Add(column); // AdminID column = new DataColumn(); column.DataType = System.Type.GetType( " System.Int32 " ); column.ColumnName = " AdminID " ; column.DefaultValue = 0 ; dataTable.Columns.Add(column); string [] result = new string [phone.Length]; for ( int i = 0 ; i < phone.Length; i ++ ) { // 生成GUID string Guid = System.Guid.NewGuid().ToString( " N " ).ToUpper(); string phoneNew = string .Empty; int phoneType = GetMobileType(phone[i], out phoneNew); if (phoneType == 0 ) { result[i] = phoneNew + " -0-0 " ; } else { DataRow dataRow = dataTable.NewRow(); dataRow[ " qy_id " ] = 16 ; dataRow[ " Info_ID " ] = Guid; dataRow[ " SP_Port " ] = " 10657027014211 " ; dataRow[ " Phone " ] = phoneNew; dataRow[ " Content " ] = smsInfo; dataRow[ " IsLong " ] = 0 ; dataTable.Rows.Add(dataRow); result[i] = phoneNew + " -1- " + Guid; } } // BCP copy SqlConnection conn = new SqlConnection(); conn.ConnectionString = " server=.;uid=dmkj_hpc;pwd=#$wlh*&1110h%c;database=DMKJ_SMS " ; conn.Open(); SqlTransaction sqlbulkTransaction = conn.BeginTransaction(); // 请在插入数据的同时检查约束,如果发生错误调用sqlbulkTransaction事务 SqlBulkCopy copy = new SqlBulkCopy(conn, SqlBulkCopyOptions.CheckConstraints, sqlbulkTransaction); copy.DestinationTableName = " T_SMS_SendInfo " ; foreach (DataColumn dc in dataTable.Columns) { copy.ColumnMappings.Add(dc.ColumnName, dc.ColumnName); } try { copy.WriteToServer(dataTable); sqlbulkTransaction.Commit(); } catch (Exception ex) { sqlbulkTransaction.Rollback(); Console.WriteLine(ex.ToString()); } finally { copy.Close(); conn.Close(); } // for (int x = 0; x < dataTable.Rows.Count; x++) // { // for (int i = 0; i < dataTable.Columns.Count; i++) // { // Console.WriteLine("Column Name:{0},and value is:{1}",dataTable.Columns[i].ColumnName.ToString(),dataTable.Rows[x][i].ToString()); // } // Console.WriteLine(); // } // foreach (string str in result) // { // Console.WriteLine(str.ToString()); // } }
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值