使用SqlBulkCopy将datatable数据批量导入sqlServer

来源:互联网 发布:choice数据excel插件 编辑:程序博客网 时间:2024/05/21 17:24
#region 使用SqlBulkCopy批量插入数据
        //参数dt,数据源datatable
        //参数tableName,目标sqlserver数据表名称
        public  void ExecuteTransactionScopeInsert(DataTable dt, string tableName)
        {
            int count = dt.Rows.Count;
            int copyTimeout = 600;
            bool flag = false;
            try
            {
                using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["DB"].ConnectionString))
                {
                    using (TransactionScope scope = new TransactionScope())
                    {
                        cn.Open();
                        using (SqlBulkCopy sbc = new SqlBulkCopy(cn))
                        {
                            //服务器上目标表的名称   
                            sbc.DestinationTableName = tableName;
                            sbc.BatchSize = dt.Rows.Count;
                            sbc.BulkCopyTimeout = copyTimeout;
                            for (int i = 0; i < dt.Columns.Count; i++)
                            {
                                //列映射定义数据源中的列和目标表中的列之间的关系   
                                sbc.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);
                            }
                            sbc.WriteToServer(dt);
                            flag = true;
                            scope.Complete();//有效的事务   
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }


        }
        #endregion


        #region 初始化datatable,以便其结构与sqlserver数据表结构相同,这个初始化函数根据每个数据表的不同需要重写,没什么通用性
        public DataTable GetTableSchema()
        {
            DataTable dt = new DataTable();
            dt.Columns.AddRange(new DataColumn[]{
            new DataColumn("oldid",typeof(int)),       
       new DataColumn("db",typeof(string))});
            return dt;
        }

        #endregion


           protected void Page_Load(object sender, EventArgs e)
        {            
            string ids = Request.Params["ids"] == null ? "" : Request.Params["ids"].ToString();//id的集合,id之间用逗号分隔,如“1,2,3,4”
            string db = Request.Params["db"] == null ? "" : Request.Params["db"].ToString();//目标sqlserver数据表的名称
            if (ids != "" & db != "")
            {
                string[] sArray = ids.Split(',');
                DataTable dt = GetTableSchema(); //初始化datatable

                //遍历id集合,将每个id作为一条记录添加到datatable

                foreach (string i in sArray)

                {
                        DataRow r = dt.NewRow();
                        r[0] = i.ToString();
                        r[1] = db;
                        dt.Rows.Add(r);
                }
                ExecuteTransactionScopeInsert(dt, "sqlServerTableName");//将datatable导入到sql server
            }
        }

原创粉丝点击