利用SqlBulkCopy快速大批量导入数据

实际的开发可能会遇到数据大批量插入数据的问题,若是一条条的循环倒数效率非常低下,这个较好的解决方案

  protected  void  Button1_Click( object  sender, EventArgs e)
      { 
 
        DateTime beginTime  =  DateTime.Now;
       Response.Write( " 开始时间: "  +  beginTime.ToString( " yyyy年MM月dd日:HH:mm:ss:fff " )); 

          // 构造一个Datatable存储将要批量导入的数据
        DataTable dt  =  new  DataTable();
          dt.Columns.Add( " id " typeof ( string ));
       dt.Columns.Add( " name " typeof ( string )); 

       //  见识下SqlBulkCopy强悍之处,来个十万条数数据试验
        int  i;
       for  (i  =  0 ; i  <  100000 ; i ++ )
          {
            DataRow dr  =  dt.NewRow();
              dr[ " name " =  i.ToString();
              dt.Rows.Add(dr);
        } 

        string  str  =  ConfigurationManager.ConnectionStrings[ " connStr " ].ConnectionString.ToString();
       // 声明数据库连接
       SqlConnection conn  =  new  SqlConnection(str); 

        conn.Open();
       // 声明SqlBulkCopy ,using释放非托管资源
       using  (SqlBulkCopy sqlBC  =  new  SqlBulkCopy(conn))
        {
              // 一次批量的插入的数据量
           sqlBC.BatchSize  =  1000 ;
            // 超时之前操作完成所允许的秒数,如果超时则事务不会提交 ,数据将回滚,所有已复制的行都会从目标表中移除
           sqlBC.BulkCopyTimeout  =  60

              // 設定 NotifyAfter 属性,以便在每插入10000 条数据时,呼叫相应事件。  
           sqlBC.NotifyAfter  =  10000 ;
              sqlBC.SqlRowsCopied  +=  new  SqlRowsCopiedEventHandler(OnSqlRowsCopied); 

              // 设置要批量写入的表
           sqlBC.DestinationTableName  =  " dbo.text "

            // 自定义的datatable和数据库的字段进行对应
            sqlBC.ColumnMappings.Add( " id " " tel " );
          sqlBC.ColumnMappings.Add( " name " " neirong " ); 

            // 批量写入
            sqlBC.WriteToServer(dt);
        }
          conn.Dispose();
    Response.Write( " <br/> " ); 



          DateTime endTime  =  DateTime.Now;
        Response.Write( " 结束时间: "  +  endTime.ToString( " yyyy年MM月dd日:HH:mm:ss:fff " ));
       TimeSpan useTime  =  endTime - beginTime; // 使用时间
        Response.Write( " <br/>插入时间: " +  useTime.TotalSeconds.ToString() + " " ); 

   }
      // 响应时事件
   void  OnSqlRowsCopied( object  sender, SqlRowsCopiedEventArgs e)
      {
    Response.Write( " <br/> OK!  " );
   } 

你可能感兴趣的:(copy)