美文网首页
SqlBulkCopy 批量导入数据

SqlBulkCopy 批量导入数据

作者: code_搬运工 | 来源:发表于2020-10-23 14:26 被阅读0次

SqlBulkCopy 这个类用于数据库大批量的数据传递,通常用于新旧数据库之间的更新。关键的一点是,即使表结构不同,也可以通过表字段或者字段位置建立映射关系,将所需的数据导入到目标数据库

使用事务批量导入数据 ,注:datatable 的列的顺序要和数据库表的列的顺序一致
 public bool sqlbulkCopyDT(DataTable sqlbulkCopyDT, string TableName, string strConn)
        {
            using (SqlConnection conn = new SqlConnection(strConn))
            {
                conn.Open();
                SqlTransaction tran = conn.BeginTransaction();

                try
                {
                    if (sqlbulkCopyDT != null && sqlbulkCopyDT.Rows.Count > 0)
                    {
                        SqlBulkCopy bulkCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.CheckConstraints, tran);
                        bulkCopy.BulkCopyTimeout = 3600;
                        try
                        {

                            bulkCopy.DestinationTableName = TableName;//***代表要插入数据的表名
                            foreach (DataColumn dc in sqlbulkCopyDT.Columns)  //传入上述table
                            {
                                bulkCopy.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);//将table中的列与数据库表这的列一一对应
                            }
                            bulkCopy.WriteToServer(sqlbulkCopyDT);
                            bulkCopy.Close();

                        }
                        catch (Exception ex)
                        {
                            bulkCopy.Close();
                            tran.Rollback();
                            return false;
                        }
                    }
                    tran.Commit();
                    conn.Close();
                }
                catch (Exception ex)
                {
                    tran.Rollback();
                    conn.Close();
                    return false;
                }

            }

            return true;
        }

/// <summary>
        /// SqlBulkCopy类的使用,批量更新数据
        /// </summary>
        public static void SqlBulkCopyDemo()
        {
            String connStr = ConfigurationManager.ConnectionStrings["connStr"].ToString();
            //从数据库中获得表结构和数据
            DataTable student = new DataTable();
            SqlDataAdapter adapter = new SqlDataAdapter("select * from student", connStr);
            adapter.Fill(student);
            //向表中添加数据
            DataRow dr;
            Random r = new Random();
            Stopwatch st = new Stopwatch();
            for(int i = 0; i<1000000; i++)//一百万条数据
            {//数据表中的列:name,no,age,sex
                dr = student.NewRow();
                dr[0] = "小花" + i;
                dr[1] = 108 + i;
                dr[2] = r.Next(9, 40);//这里是因为数据表中有约束,
                dr[3] = (i % 2 == 0 ? "男" : "女");//这个也是有约束
                student.Rows.Add(dr);
            }
            SqlBulkCopy bulk = new SqlBulkCopy(connStr);
            bulk.DestinationTableName = "student";//设置目标表,这里是数据库中的student表
            bulk.ColumnMappings.Add(0, 0);//建立映射关系
            bulk.ColumnMappings.Add(1, 1);
            bulk.ColumnMappings.Add(2, 2);
            bulk.ColumnMappings.Add(3, 3);
            st.Start();//开始计时
            bulk.WriteToServer(student.GetChanges());
            st.Stop();//结束计时
            Console.WriteLine("数据插入成功,耗时为:" + st.ElapsedMilliseconds + "毫秒");
        }

参考:https://www.cnblogs.com/daimajun/archive/2017/03/16/6561682.html

相关文章

  • SqlBulkCopy 批量导入数据

    SqlBulkCopy 这个类用于数据库大批量的数据传递,通常用于新旧数据库之间的更新。关键的一点是,即使表结构不...

  • C#大数据导入-SqlBulkCopy

    方法1:DataTable方式 方法2:使用List方式

  • PY3 批量导入EXCEL到数据库脚本模板

    1、支持分批导入(可配置) 2、批量导入降低数据库操作 3、批量数据错误会自动重新生成导入数据最终只剩下错误数据,...

  • storm

    离线计算批量获取数据、批量传输数据、周期性批量计算数据、数据展示(报表)代表技术:sqoop批量导入数据、hdfs...

  • 系统学习大数据:Storm的核心组件和编程模型是什么样的?

    1、离线计算 离线计算:批量获取数据、批量传输数据、周期性批量计算数据、数据展示; 代表技术:Sqoop批量导入数...

  • 深入了解数据导入的一些解决方案

    项目中除了有数据导出之外,也存在批量数据导入的场景。比如通过Execl电子表格进行批量开卡,批量导入用户或者部门信...

  • Elasticsearch 入门: _bulk 批量导入数据

    批量导入数据 使用 Elasticsearch Bulk API /_bulk批量 update 步骤: 需求:我...

  • 导入方案的思考

    导入的背景 用户为了更方便进行批量的数据处理,系统提供导入功能来满足该需求。对研发人员来说,导入等价于批量处理数据...

  • 多线程批量导入数据

    如何用多线程批量导入数据?最近的使用场景就是批量导入excel数据,数据量太大的话会导致超时、服务异常超时等问题。...

  • Storm

    离线计算 离线计算就是批量的处理数据,周期性的批量计算数据。 代表技术: Sqoop –批量导入数据 HDF...

网友评论

      本文标题:SqlBulkCopy 批量导入数据

      本文链接:https://www.haomeiwen.com/subject/xqcughtx.html