实现功能;

从Oracle中读取数据,然后复制到SqlServer数据库中

有如下几个注意项:

1.需要在app.config中添加如下节点

  <runtime><assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"><dependentAssembly><assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/><bindingRedirect oldVersion="4.112.0.0-4.112.9999.9999" newVersion="4.122.1.0"/></dependentAssembly></assemblyBinding></runtime>

  2.添加引用Oracle.ManagedDataAccess.dll使得OracleConnection使用引用Oracle.ManagedDataAccess.Client

3.计算机->右键(属性)->高级系统设置->环境变量->在最前面添加instantclient_12_2的文件地址(如果有客户端的话,可不添加环境变量配置)

4.bin文件夹下添加如下dll

5.完整代码在云盘链接:https://pan.baidu.com/s/1nvpBT4d 密码: 2343

前台截图如下

后台代码如下

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration;
using System.Data.SqlClient;
using Oracle.ManagedDataAccess.Client;namespace ExportOracleToSqlServer
{public partial class OTTImport : Form{private NLog.Logger logger = new NLog.LogFactory().GetCurrentClassLogger();public string oracleCityname = string.Empty;public OTTImport(){InitializeComponent();}private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e){string date = Convert.ToDateTime(dtpime.Text).ToString("yyyy-MM-dd");logger.Info("DT创建完毕");string sqlText = "select * from " + oracleCityname + " where p_day=to_date('" + date + "','yyyy-MM-dd')";logger.Info("sql语句为:" + sqlText + "");logger.Info("Oracleconn连接" + ConfigurationManager.ConnectionStrings["OracleConnectionString"].ConnectionString);try{DataTable dt = GetSqlTableScheme();//先读取ORACLE的表long count = GetCount(date);int previousProgressValue = 0;using (OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["OracleConnectionString"].ConnectionString)){logger.Info("Oracleconn连接" + ConfigurationManager.ConnectionStrings["OracleConnectionString"].ConnectionString);conn.Open();using (OracleCommand cmd = conn.CreateCommand()){this.logger.Info("OracleCommand");cmd.CommandType = CommandType.Text;cmd.CommandTimeout = 12 * 60 * 60;cmd.CommandText = sqlText;int i = 0;using (OracleDataReader reader = cmd.ExecuteReader()){this.logger.Info("OracleDataReader");while (reader.Read()){i++;dt.Rows.Add(reader["Columns1"].ToString(),reader["Columns2"].ToString(),reader["Columns3"].ToString(),reader["Columns4"].ToString(),reader["Columns5"].ToString());int currentProgressValue = Convert.ToInt32(i * 100 / count);if (currentProgressValue > previousProgressValue){previousProgressValue = currentProgressValue;this.backgroundWorker1.ReportProgress(currentProgressValue,"当前进度");}//每读取十万条数据,进行入库一次if (i % 100000 == 0){InsertIntoSqlServer(dt);dt = GetSqlTableScheme();}}if (dt.Rows.Count > 0){InsertIntoSqlServer(dt);}}}}}catch (Exception){throw;}logger.Info("Oracle数据读取完毕");this.backgroundWorker1.ReportProgress(0, "完成入SQL库!");}private static DataTable GetSqlTableScheme(){DataTable dt = new DataTable();dt.Columns.Add("Columns1", typeof(string));dt.Columns.Add("Columns2", typeof(string));dt.Columns.Add("Columns3", typeof(string));dt.Columns.Add("Columns4", typeof(string));dt.Columns.Add("Columns5", typeof(string));return dt;}private void InsertIntoSqlServer(DataTable dt){try{using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString)){logger.Info("SqlConnection");conn.Open();using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn.ConnectionString, SqlBulkCopyOptions.UseInternalTransaction)){bulkCopy.DestinationTableName = "dbo." + txtdboname.Text.Trim() + "";bulkCopy.BatchSize = dt.Rows.Count;bulkCopy.BulkCopyTimeout = 12 * 60 * 60;bulkCopy.ColumnMappings.Clear();bulkCopy.ColumnMappings.Add("Columns1", "Columns1");bulkCopy.ColumnMappings.Add("Columns2", "Columns2");bulkCopy.ColumnMappings.Add("Columns3", "Columns3");bulkCopy.ColumnMappings.Add("Columns4", "Columns4");bulkCopy.ColumnMappings.Add("Columns5", "Columns5");bulkCopy.WriteToServer(dt);}}//logger.Info("完毕");//this.backgroundWorker1.ReportProgress(100, "全部完成!");}catch (Exception){throw;}}private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e){progressBar1.Value = e.ProgressPercentage;if (e.UserState != null){label4.Text = string.Format("{0}[{1}%]", e.UserState.ToString(), e.ProgressPercentage);}}private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e){if (e.Error == null){MessageBox.Show("成功!");}else{MessageBox.Show(e.Error.ToString());}}private void button1_Click(object sender, EventArgs e){#region 设置数据表明switch (cobCity.Text){case "杭州":oracleCityname = "HANGZHOU";break;case "湖州":oracleCityname = "HUZHOU";break;case "金华":oracleCityname = "JINHUA";break;case "嘉兴":oracleCityname = "JIAXING";break;case "丽水":oracleCityname = "LISHUI";break;case "宁波":oracleCityname = "NINGBO";break;case "衢州":oracleCityname = "QUZHOU";break;case "绍兴":oracleCityname = "SHAOXING";break;case "台州":oracleCityname = "TAIZHOU";break;case "温州":oracleCityname = "WENZHOU";break;case "舟山":oracleCityname = "ZHOUSHAN";break;default:oracleCityname = "HANGZHOU";break;}#endregionif (txtdboname.Text == ""){MessageBox.Show("请输入要入库的表名");return;}else{if (backgroundWorker1.IsBusy == false){backgroundWorker1.RunWorkerAsync();}}}private void OTTImport_Load(object sender, EventArgs e){cobCity.SelectedIndex = 0;}public long GetCount(string date){long count = 0;using (OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["OracleConnectionString"].ConnectionString)){string sqlText = "select count(0) from " + oracleCityname + " where p_day=to_date('" + date + "','yyyy-MM-dd')";conn.Open();using (OracleCommand cmd = conn.CreateCommand()){this.logger.Info("OracleCommand");cmd.CommandType = CommandType.Text;cmd.CommandTimeout = 12 * 60 * 60;cmd.CommandText = sqlText;count = Convert.ToInt64(cmd.ExecuteScalar());}conn.Close();}return count;}}
}

  

转载于:https://www.cnblogs.com/dushaojun/p/8056735.html

C#如何无客户端连接Oracle数据库相关推荐

  1. Oracle学习总结(3)——Navicat客户端连接Oracle数据库常见问题汇总

    问题1:ORA-28547:connection to server failed,probable Oracle Net admin error 问题描述: 服务器连接失败 解决方案: 百度了一下, ...

  2. PLSQL无客户端连接ORACLE

    刚接触oracle时配置环境之类的弄了好久,网上各种搜索各种学习,那时候去官网下客户端,一个客户端英爱是800M左右,这篇文章自己搜索后整理一下备忘使用,如需要可以照做即可配置成功,亲测可行.大致思路 ...

  3. 配置ORACLE 客户端连接到数据库

    --================================= -- 配置ORACLE 客户端连接到数据库 --================================= Oracle ...

  4. oracle9i连不上10g,oracle 10g客户端连接oracle 9i数据库

    oracle10g客户端连接oracle9i数据库,Net Manager配置 概要文件:命名方法选择:TNSNAMES 服务命名:创建-下一步到第4页,选择(oracle8或更低版本)SID,输入数 ...

  5. Oracle新手笔记(2) 关于Oracle 9i或9i以上版本客户端连接Oracle 8i及8i版本以下服务器端中文字符乱码的解决办法...

    在做项目过程中,遇到Oracle 9i或9i版本以上客户端连接Oracle 8i及8i版本以下服务器端时,查询出来的中文数据全部变成了乱码.经查询资料终于解决了乱码问题. 开发工具是ASP.NET(C ...

  6. pg数据库开启远程连接_如何运行远程客户端连接postgresql数据库

    如何运行远程客户端连接 postgresql 数据库 前提条件是 2 个: 1 , pg_hba.conf 里面配置了运行远程客户机连接 pg_hba.conf 配置后需要重新加载 reload 生效 ...

  7. Linux无界面新建Oracle数据库实例

    Linux无界面新建Oracle数据库实例 根据https://blog.csdn.net/qq_24058757/article/details/88220437 步骤操作后总结整理的自己的新建实例 ...

  8. mysql重装时1130_客户端连接MySQL数据库时出现错误代码1130的解决办法

    在日常使用数据中为了方便管理我们可能会使用客户端来连接MySQL,不过有时可能会出现无法连接. 如果第一次使用客户端连接MySQL数据库那么出现错误代码1130的概率会比较高,原因是禁止连接. ERR ...

  9. oracle监听 客户 实例,oracle 数据库实例 监听

    创建Oracle数据库.数据库名与实例名与SID之间的关系(图文详解) 目录 目录 软件环境 前言 安装Oracle监听程序 启动停止监听程序 创建数据库 数据库名db_name 数据库实例名inst ...

最新文章

  1. 《游戏服务器的架构演进》阅读笔记
  2. 编写一个函数实现从 1 到 n 共 n 个数的累加_leetcode306_go_累加数
  3. Elasticsearch全文检索对比:match、match_phrase、wildcard
  4. [HDOJ3998] Sequence(DP,最大流)
  5. 如题,用C#语言 如何给下拉列表框动态添加数据?,C#复习题 单项选择题
  6. 使用yum查看安装了哪些软件包、某软件包是否已经安装
  7. [leetcode] 704.二分查找
  8. ie浏览器跳转谷歌浏览器_微软IE浏览器的命运:加速死亡
  9. 三分钟撸完前后端crypto-js加解密,你学废了吗?
  10. 基于C4.5神经网络集成
  11. 特斯拉回应提车考试:仅作为丰富交付体验的“选修”活动
  12. Java简历模板(三十个模板随意选)
  13. python 正则匹配电话与ip
  14. mos管结电容等效模型_【详解各元器件等效电路】电阻、电容、电感、二极管、MOS管!...
  15. 客户服务器与p2p文件分发,P2P大文件分发技术 | 点量软件
  16. 电阻的快速选型对开发项目非常重要
  17. python毕业论文参考文献格式范例_毕业论文参考文献范例
  18. USACO 2019 February Contest Platinum T3: Mowing Mischief
  19. 常用网站提交入口汇总让互联网收录你的网站
  20. java地理位置的获取_Java 根据 IP 获取地理位置

热门文章

  1. 使用dotMemory Unit发现并修复内存问题
  2. SQL——联接分类和本质
  3. 要写related_name的两种情况
  4. 从零开始用python处理excel视频_书榜 | 计算机书籍(6.29-7.5)销售排行榜
  5. 英语计算机简历范文模板,计算机专业英文简历模板范文六篇(3)
  6. 关于Date类型、时间戳格式转换方法
  7. mysql清空数据表信息
  8. android xml 多行注释,C#中的XML多行注释 - 我做错了什么?
  9. python中空格替换_Python替换空格
  10. android 拖动进度,Android 可拖动的seekbar自定义进度值