网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

C#+Oracle如何实现批量插入数据进度条-创新互联

这篇文章给大家分享的是有关C#+Oracle如何实现批量插入数据进度条的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

为大同等地区用户提供了全套网页设计制作服务,及大同网站建设行业解决方案。主营业务为网站制作、成都做网站、大同网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

批量插入

项目中运用的是System.Data.OracleClient。首先将Excel数据通过转换函数转换为DataTable,其中的字段和数据库中相应表格的字段完全对应。

public int Import2Oracle(ISheet sheet, string tablename)
{
  DataTable dt = GetDataFromExcelByNPOI(sheet); //经过转换后获得DataTable
  OracleCommand cmd = conn.CreateCommand();// conn为数据库连接对象
  OracleDataAdapter da = new OracleDataAdapter(cmd);
  OracleCommandBuilder ocb = new OracleCommandBuilder(da);
  string SelectSQL = "select * from "+tablename+ " where ROWNUM=0";
  da.SelectCommand.CommandText = SelectSQL;
  da.InsertCommand = ocb.GetInsertCommand();
  da.Update(dt);
  return 1; //返回正常
}

上述代码没有列出连接Oracle数据库相关代码,该段代码将DataTable批量插入数据库中。为了利用进度条控件实现显示插入的进度,需要在每次成功插入一条数据后更新进度条。

进度条实现

为了实现实时更新插入进度,需要用到OracleDataAdapter类下RowUpdated事件。官方文档中有注释,当使用Update方法时,在每一条记录更新时会发生两个事件,即OnRowUpdating和OnRowUpdated。利用OnRowUpdated这个事件即可记录已插入多少条数据,显示插入进度。

int Sum = 0; //总记录数
int rowNum = 0; //插入记录数
public int Import2Oracle(ISheet sheet)
{
  Sum = sheet.LastRowNum - 1; //获取总记录数
  DataTable dt = GetDataFromExcelByNPOI(sheet); //经过转换后获得DataTable,利用到了NPOI
  OracleCommand cmd = conn.CreateCommand();// conn为数据库连接对象
  OracleDataAdapter da = new OracleDataAdapter(cmd);
  OracleCommandBuilder ocb = new OracleCommandBuilder(da);
  string SelectSQL = "select * from GZGDZL."+tablename+ " where ROWNUM=0";
  da.SelectCommand.CommandText = SelectSQL;
  da.InsertCommand = ocb.GetInsertCommand();
  
  // update, this operation fires two events 
  // (RowUpdating/RowUpdated) per changed row 
  //这里只用到RowUpdated事件
  da.RowUpdated += new OracleRowUpdatedEventHandler(OnRowUpdated);
  
  da.Update(dt);
  return 1; //返回正常
}
//OnRowUpdated事件
 private void OnRowUpdated(object sender, OracleRowUpdatedEventArgs e)
{
  //刷新界面进度条 
  rowNum = rowNum + 1;
  reportValue = (int)(rowNum /m_sheet.LastRowNum * 100);
  this.progressBar1.Value = percent; //progressBar控件已经设置大值为100,最小值为0
}

经过改进后以上代码即可让用户实时看到数据插入进度,虽然在一定程度上会影响插入的效率,但换来了用户对插入状态的了解,而且这种影响在数据量不是特别巨大的情况下几乎可以忽略。

感谢各位的阅读!关于“C#+Oracle如何实现批量插入数据进度条”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享文章:C#+Oracle如何实现批量插入数据进度条-创新互联
本文URL:http://bjjierui.cn/article/ppioj.html

其他资讯