批量添加数据

1循环取得数据进行多次insert的操作
2.SqlBulkCopy是个不错的选择,直接由DataTable可以导入到数据库
,但要注意(1)列名与目标表一致(2)数据类型一致(3)空值容错处理,
3.如果是数据量非常大,超过10W以上的数据,可以考虑生成.dtsx文件,然后由C#代码直接调用,效率还是不错的。
 
sqlBuliCopy例子:
#region数据库对应表
        /// <summary>
        /// 数据库对应表
        /// </summary>
        /// <returns></returns>
        private static DataTable GetTable()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("User_ID", typeof(string));
            dt.Columns.Add("User_Name", typeof(string));
            dt.Columns.Add("User_Birth", typeof(DateTime));
            dt.Columns.Add("User_Sex", typeof(int));
            return dt;
        }
        #endregion
 
        /// <summary>
        /// 批量插入数据
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public void AddModels()
        { List<UserEntity> users = (List< UserEntity>)HttpContext.Current.Cache["UserList "];         
            DataTable dt_users = GetTable ();
            foreach (UserEntity model in users)
            {
                DataRow dr_user = dt_ users.NewRow();
              
                    dr_ user ["User_ID"] = Guid.NewGuid().Tostring();
                    dr_ user ["User_Name "] = model.UserName;
                    dr_ user ["User_Birth "] = model.UserBirth;
                    dr_ user ["UserSex"] = model.Sex;
                    dt_ users.Rows.Add(dr_ user);
                }
            }
            if (dt_ users != null && dt_ user.Rows.Count > 0)
            {
                using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConn"].ConnectionString))
                {
                    conn.Open();
                    using (SqlTransaction trans = conn.BeginTransaction())
                    {
                        try
                        {
                            using (SqlBulkCopy bulk = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, trans))
                            {
                                bulk.BatchSize = 1000000;
                                bulk.DestinationTableName = "db_User";
                                bulk.WriteToServer(dt_users);
                                trans.Commit();
                                IsRead = true;
                            }
                        }
                        catch
                        {
                            IsRead = false;
                            trans.Rollback();
                        }
                    }
                }
            }
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值