注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Blue的浪漫-分享快乐-分享美丽

感谢上苍我所拥有的…感谢上苍我所没有的…

 
 
 

日志

 
 
关于我

一个热爱祖国.热爱生活.兴趣爱好广泛的80后小女子~~.《渴望浪漫博客》博客前八名之列。欢迎朋友们加我博友!

网易考拉推荐

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

2012-10-02 10:14:40|  分类: 网站编程类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
实际的开发可能会遇到数据大批量插入数据的问题,若是一条条的循环倒数效率非常低下,这个较好的解决方案
  
   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! ");
     } 
 
  
 
 
这个是程序的运行结果:  
通过SqlBulkCopy批量导入数据库,可以触发触发器吗? 
可以,但是你要在创建sqlbulkcopy的时候,通过使用SqlBulkCopy (String, SqlBulkCopyOptions) 指定SqlBulkCopyOptions为FireTriggers,这样你在对应的表中导入大量数据的时候,就可以调用触发器,比如insert触发器。
  评论这张
 
阅读(496)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017