虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > C#编程 > C# Oracle批量插入数据进度条的实现代码

C# Oracle批量插入数据进度条的实现代码
类别:C#编程   作者:码皇   来源:互联网   点击:

这篇文章主要介绍了C Oracle批量插入数据进度条的实现代码,需要的朋友可以参考下

前言

由于项目需求,需要将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#自定义音乐播放器进度条
  • C#实现带百分比的进度条功能示例
  • C#实现带进度条的ListView
  • C# Winform下载文件并显示进度条的实现代码
  • c#根据文件大小显示文件复制进度条实例
  • c#进度条 progressBar 使用方法的小例子
  • asp.net(c#)开发中的文件上传组件uploadify的使用方法(带进度条)
  • C#中常使用进度条的代码
相关热词搜索: c 进度条