博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

sql server之批量数据导入

Posted on 2015-11-27 08:55  fourier的天空  阅读(313)  评论(0编辑  收藏  举报

实际应用场景中,有时会需要把一批数据导入数据库。这批数据可能来源于另一个数据源。比较常规的做法是先读取到dataset,然后跑一个循环,每一行拼一句insert into语句,执行之。用过的人会知道,这种导入数据的方法效率十分低下。那么,有没有什么更好的方法呢?答案是有的。使用System.Data.SqlClient.SqlBulkCopy类。我觉得这个应该是在使用sql server资源管理器时,导入数据时所使用的方法。代码如下:

 

-----------------------------------------------我是为代码而生的分割线-----------------------------------------------------

    private void insertData(DataTable dt)
    {

        if (dt.Rows.Count > 0)
        {

     //如果表格有自增字段。需要增加这个字段,并且赋第一行一个初值。所以,请谨慎操作,虽未经测试,但是如果初值重复应该是会报错的。
            dt.Columns.Add("InnerId", Type.GetType("System.Int32"));  
            dt.Rows[0]["InnerId"] = 1;
    //connstr 为连接字符串。
            SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connstr, SqlBulkCopyOptions.UseInternalTransaction);

            sqlbulkcopy.DestinationTableName = "tablename";//数据库中的表名
            sqlbulkcopy.WriteToServer(dt);
        }
    }

-----------------------------------------------我是为代码而生的分割线-----------------------------------------------------

 

这种方法执行效率很高。尤其是数据量大的时候(主要是行数),相当明显。

感觉前10年的编程生涯都白过了呢。这么简洁高效的处理方法刚刚才发现。