C# Oracle批量插入数据进度条的实现代码

所属分类: 软件编程 / C#教程 阅读数: 118
收藏 0 赞 0 分享

前言

由于项目需求,需要将Excel中的数据进过一定转换导入仅Oracle数据库中。考虑到当Excel数据量较大时,循环Insert语句效率太低,故采用批量插入的方法。在插入操作运行时,会造成系统短暂的“卡死”现象。为了让用户知道插入的状态,需要制作一个进度条来显示插入的进度。

批量插入

项目中运用的是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批量插入数据进度条的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

更多精彩内容其他人还在看

c#开发word批量转pdf源码分享

已经安装有Office环境,借助一些简单的代码即可实现批量Word转PDF,看下面的实例源码吧
收藏 0 赞 0 分享

c# xml API操作的小例子

这篇文章主要介绍了c# xml API操作的小例子,有需要的朋友可以参考一下
收藏 0 赞 0 分享

c#唯一值渲染实例代码

这篇文章主要介绍了c#唯一值渲染实例代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

淘宝IP地址库采集器c#代码

这篇文章主要介绍了淘宝IP地址库采集器c#代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

C#在后台运行操作(BackgroundWorker用法)示例分享

BackgroundWorker类允许在单独的专用线程上运行操作。如果需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用BackgroundWorker类方便地解决问题,下面看示例
收藏 0 赞 0 分享

c#文本加密程序代码示例

这是一个加密软件,但只限于文本加密,加了窗口控件的滑动效果,详细看下面的代码
收藏 0 赞 0 分享

c#生成站点地图(SiteMapPath)文件示例程序

这篇文章主要介绍了c#生成站点地图(SiteMapPath)文件的示例,大家参考使用
收藏 0 赞 0 分享

C# 键盘Enter键取代Tab键实现代码

这篇文章主要介绍了C# 键盘Enter键取代Tab键实现代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

C# WinForm导出Excel方法介绍

在.NET应用中,导出Excel是很常见的需求,导出Excel报表大致有以下三种方式:Office PIA,文件流和NPOI开源库,本文只介绍前两种方式
收藏 0 赞 0 分享

C#串口通信程序实例详解

在.NET平台下创建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空间是System.IO.Ports,创建C#串口通信程序的具体实现是如何的呢?让我们开始吧
收藏 0 赞 0 分享
查看更多