ODP.NET OracleBulkCopy
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的更多相关文章
- 在线程中用 OracleBulkCopy 导至 CPU 百分百
抓取到的数据, 要批量写数据到 ORACLE , 一开始是用的EF, 处理速度很慢. 主要表现在验证数据上(db.GetValidationErrors), 每分钟才能写 1000条不到. 换成 En ...
- C# OracleBulkCopy 批量插入oracle数据库的方法
只有安装了oracle 11G客户端的机器上才可以用,要用到ODP.NET组件中的oracleDataAccess.DLL,命名空间引用为Oracle.DataAccess.Client; 引用:Or ...
- C#使用OracleBulkCopy
首先使用PL/SQL 通过语句:select * from v$version; 查询出使用的oracle版本,弄到对应版本的Oracle.DataAccess.DLL 我本地使用版本为:11.2. ...
- C# oracle odp.net 32位/64位版本的问题
问题如下: 系统是win7 64位,技术 asp.net mvc 4, 数据库 oracle 11g. 由于某些原因只能使用 32的 ODP.NET ( Oracle Data Provider ), ...
- ODAC (odp.net) 从开发到部署
2013-09-30 16:08 4097人阅读 评论(0) 收藏 举报 分类: Oracle(10) 版权声明:本文为博主原创文章,未经博主允许不得转载. 1. 确定你开发机和服务器的操作系统是 ...
- EF for Oracle,dotConnect for Oracle,ODP.NET
dotConnect for Oracle dotConnect for Oracle是一款为Microsoft .NET Framework提供直接Oracle数据库连接的数据发生器控件.它完全基于 ...
- PetaPoco利用ODP.NET Managed Driver连接Oracle
大概几年之前用PetaPoco做过一个Oracle的项目,开发的时候还需要安装oracle的client,非常麻烦.调试好环境后,一直到项目结束都不敢重装系统.最近又有一个需求需要读取oracle,可 ...
- 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 ...
- 64位操作系统 通过ODP.NET 访问ORACLE 11g
摘要:64位操作系统部署.NET 程序访问oracle时,无法连接问题.(注意:客户端是64位系统 ,服务端是否64位 还是32位无关.) 1.到oracle 官网搜索相关版本的 ODAC网址: ht ...
随机推荐
- 【Flask】Sqlalchemy group_by having
### group_by:根据某个字段进行分组.比如想要根据性别进行分组,来统计每个分组分别有多少人 ### having: having是对查找结果进一步过滤.比如只想要看未成年人的数量,那么可以首 ...
- ResourceLoader笔记
Ant路径匹配 Ant路径通配符支持“?”.“*”.“**”,注意通配符匹配不包括目录分隔符“/”: “?”:匹配一个字符,如“config?.xml”将匹配“config1.xml”: “*”:匹配 ...
- block(data block,directory block)、inode、块位图、inode位图和super block概念详解【转】
本文转载自:https://blog.csdn.net/jhndiuowehu/article/details/50788287 一.基本概念: 1.block:文件系统中存储数据的最小单元 ...
- pom.xml里使用了一系列的版本的框架,配置一个版本属性,让使用版本的都引用这个属性
在pom.xml定义properties标签 <properties> <project.build.sourceEncoding>UTF-8</project.buil ...
- Linux mysql主从同步配置
一.在两台Ubuntu机器上安装mysql1.检查系统中是否安装了mysql 这个是已经安装了的 没有安装的话执行上条命令===============================MySQL的一些 ...
- 3.django连接mysql数据库及安装mysqldb驱动报错解决办法
1.在setting.py设置连接数据库 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'djang ...
- 用简单的反射优化代码(动态web项目)
在动态web项目中,没有使用框架时,只是简单的jsp访问servlet实现增删改查, 无论是哪个方法都需要经过Servlet中的doGet()方法或doPost()方法,我们可以在链接中附带参数进行区 ...
- UVA 10200 Prime Time 水
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- Nagios的基本安装配置
//////////////////////nagios//////////////////////nagios原理:http://www.linuxidc.com/Linux/2013-11/927 ...
- Servlet源码级别进行详解
1.首先我们先看看Servlet的类结构图,然后再分别介绍其中的接口方法 由上图可以看到,Servlet和ServletConfig都是顶层接口类,而GenericServlet实现了这两个顶层类,然 ...