using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Oracle.DataAccess.Client;
using System.Diagnostics;
using System.Data;
 
namespace BulkInsert
{
class Program
{
static string cs = "Data Source=ORA;User Id=O;Password=P;";
//Table Schema =
//CREATE TABLE BIGONE (N DECIMAL(6,0), T NVARCHAR2(64))
const int COUNT = 50000;
 
static void Main(string[] args)
{
var data = new Dictionary<int, string>();
for (int i = 0; i < COUNT; i++)
data.Add(i, string.Format("INFO{0:00000000}", i));
CleanTable();
TestCommand(data);
CleanTable();
TestBulkCopy(data);
Console.Read();
}
 
static void CleanTable()
{
using (var cn = new OracleConnection(cs))
{
cn.Open();
var cmd = cn.CreateCommand();
cmd.CommandText = "TRUNCATE TABLE BIGONE";
cmd.ExecuteNonQuery();
}
}
 
static void TestCommand(Dictionary<int, string> data)
{
Stopwatch sw = new Stopwatch();
sw.Start();
using (var cn = new OracleConnection(cs))
{
cn.Open();
var cmd = cn.CreateCommand();
cmd.CommandText =
"INSERT INTO BIGONE (N, T) VALUES (:n, :t)";
var pN = cmd.Parameters.Add("n", OracleDbType.Decimal);
var pT = cmd.Parameters.Add("t", OracleDbType.NVarchar2);
foreach (int k in data.Keys)
{
pN.Value = k;
pT.Value = data[k];
cmd.ExecuteNonQuery();
}
cn.Close();
}
sw.Stop();
Console.WriteLine("TestCommand: {0:N0}ms", sw.ElapsedMilliseconds);
}
static void TestBulkCopy(Dictionary<int, string> data)
{
Stopwatch sw = new Stopwatch();
sw.Start();
using (var cn = new OracleConnection(cs))
{
cn.Open();
var cmd = cn.CreateCommand();
cmd.CommandText="SELECT * FROM BIGONE WHERE 1=0";
DataTable t = new DataTable();
var dr = cmd.ExecuteReader();
//create the DataTable object according to Oracle table
t.Load(dr);
dr.Close();
//fill the DataTable
foreach (int k in data.Keys)
t.Rows.Add(k, data[k]);
//Bulk Copy!
OracleBulkCopy bc = new OracleBulkCopy(cn);
bc.DestinationTableName="BIGONE";
bc.WriteToServer(t);
bc.Close();
cn.Close();
}
sw.Stop();
Console.WriteLine("TestBulkCopy: {0:N0}ms", sw.ElapsedMilliseconds);
}
}
}

ODP.NET OracleBulkCopy的更多相关文章

  1. 在线程中用 OracleBulkCopy 导至 CPU 百分百

    抓取到的数据, 要批量写数据到 ORACLE , 一开始是用的EF, 处理速度很慢. 主要表现在验证数据上(db.GetValidationErrors), 每分钟才能写 1000条不到. 换成 En ...

  2. C# OracleBulkCopy 批量插入oracle数据库的方法

    只有安装了oracle 11G客户端的机器上才可以用,要用到ODP.NET组件中的oracleDataAccess.DLL,命名空间引用为Oracle.DataAccess.Client; 引用:Or ...

  3. C#使用OracleBulkCopy

    首先使用PL/SQL  通过语句:select * from v$version; 查询出使用的oracle版本,弄到对应版本的Oracle.DataAccess.DLL 我本地使用版本为:11.2. ...

  4. C# oracle odp.net 32位/64位版本的问题

    问题如下: 系统是win7 64位,技术 asp.net mvc 4, 数据库 oracle 11g. 由于某些原因只能使用 32的 ODP.NET ( Oracle Data Provider ), ...

  5. ODAC (odp.net) 从开发到部署

    2013-09-30 16:08 4097人阅读 评论(0) 收藏 举报  分类: Oracle(10)  版权声明:本文为博主原创文章,未经博主允许不得转载. 1. 确定你开发机和服务器的操作系统是 ...

  6. EF for Oracle,dotConnect for Oracle,ODP.NET

    dotConnect for Oracle dotConnect for Oracle是一款为Microsoft .NET Framework提供直接Oracle数据库连接的数据发生器控件.它完全基于 ...

  7. PetaPoco利用ODP.NET Managed Driver连接Oracle

    大概几年之前用PetaPoco做过一个Oracle的项目,开发的时候还需要安装oracle的client,非常麻烦.调试好环境后,一直到项目结束都不敢重装系统.最近又有一个需求需要读取oracle,可 ...

  8. csharp: ODP.NET,System.Data.OracleClient(.net 4.0) and System.Data.OleDb读取Oracle g 11.2.0的区别

    ODP.NET: 引用: using Oracle.DataAccess; //Oracle g 11.2.0 using Oracle.DataAccess.Client; using Oracle ...

  9. 64位操作系统 通过ODP.NET 访问ORACLE 11g

    摘要:64位操作系统部署.NET 程序访问oracle时,无法连接问题.(注意:客户端是64位系统 ,服务端是否64位 还是32位无关.) 1.到oracle 官网搜索相关版本的 ODAC网址: ht ...

随机推荐

  1. FullPage.js全屏滚动插件

    一.介绍 fullPage.js是一个基于jQuery的插件,他能够很方便.很轻松的制作出全屏网站,主要功能有: 1.支持鼠标滚动 2.多个回调函数 3.支持手机.平板触摸事件 4.支持CSS3动画 ...

  2. matplotlib模块之plot画图

    关于matplotlib中一些常见的函数,https://www.cnblogs.com/TensorSense/p/6802280.html这篇文章讲的比较清楚了,https://blog.csdn ...

  3. KVC和KVO的理解(底层实现原理)

    1.KVC,即是指 NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属性.而不是通过调用Setter.Getter方法访问.KVO 就是基于 KVC 实现的 ...

  4. processing学习整理---Image

      1.Load and Display(加载与显示) Images can be loaded and displayed to the screen at their actual size or ...

  5. session共享个人小结

    一.需求问题: 如果你的网站是存放在一个机器上,那么是不存在这个问题的,因为会话数据就在这台机器,但是如果你使用了负载均衡把请求分发到不同的机器呢? 这个时候会话id在客户端是没有问题的, 但是如果用 ...

  6. 自己动手写OpenStack的QoS功能(4)

    本文地址:http://blog.csdn.net/spch2008/article/details/9283561 数据库相应操作已完成,对OVS-Plugin进行修改. 在quantum\plug ...

  7. keystone DB in devstack

    ~$ mysql -u -p root mysql> use keystone; mysql> show tables;+------------------------+| Tables ...

  8. Spring Boot入门——web相关配置

    1.Servlet 引用HttpServlet接口,采用原生的Servlet进行请求响应 2.Listener 引用ServletContextListener,常用于Web缓存 3.Filter 引 ...

  9. Office文件的实质是什么

    Office文件的实质是什么 一.总结 一句话总结:对于一个Microsoft Office文件,其实质是一个Windows复合二进制文件(Windows Compound Binary File), ...

  10. Hive数据导入——数据存储在Hadoop分布式文件系统中,往Hive表里面导入数据只是简单的将数据移动到表所在的目录中!

    转自:http://blog.csdn.net/lifuxiangcaohui/article/details/40588929 Hive是基于Hadoop分布式文件系统的,它的数据存储在Hadoop ...