zoukankan      html  css  js  c++  java
  • 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);
    }
    }
    }

  • 相关阅读:
    ASP.NET Ajax – History Support
    Windows Server 2008 R2修改远程桌面连接数
    SQL中的行号ROW_NUMBER()
    数据库的缓存管理[ASPNET2.0深入挖掘系列听后感]
    html页面内容分页【转】
    内容页中操作MasterPage里的用户控件
    回车提交表单
    LightBox——一个不错的图片预览效果
    一个不错的日期控件
    三维地图[E都市]
  • 原文地址:https://www.cnblogs.com/skyay/p/5822208.html
Copyright © 2011-2022 走看看