`
nihao620
  • 浏览: 62714 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

C#操作Oracle的CLOB列

阅读更多

Oracle clob列的大小超过32M时使用分割发送,小于32M时正常发送

 

 

Oracle clob列性能测试的测试用例:

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;

namespace db
{
    class Program
    {
       // private OracleConnection mycon = new OracleConnection("Data Source=DB1;User Id = system;Password= asdf1234;");

        private OracleConnection mycon = new OracleConnection("Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.167.133.89)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=db1)));User Id = system;Password= asdf1234;");
        private OracleCommand mycom = null;

        private void open()
        {
            mycon.Open();
        }

        private void close()
        {
            mycon.Close();
        }

        private void delete() 
        {
            mycom = new OracleCommand("delete from system.tb1", mycon);
            mycom.ExecuteNonQuery();
        }
        
        private void insert(int num, Int32 length)
        {            
            
            String insertStr = "insert into system.tb1(CINT,CCLOB) values(:p1,:p2)";
            mycom = new OracleCommand(insertStr, mycon);
           
            string s = "a";
            DateTime dt1, dt2;
            OracleClob clob = null;
            OracleDataReader dr;
            
            if (length>=16)
            {                
                if (length == 128)
                {
                    for (int i = 0; i < 27; i++)
                    {
                        s += s;
                    }
                }
                else if (length == 32)
                {
                    for (int i = 0; i < 25; i++)
                    {
                        s += s;
                    }
                }
                else
                {                    
                    s = "";
                    string tmp = "a";
                    for (int i = 0; i < 20; i++)
                    {
                        tmp += tmp;
                    }
                    for (int j = 0; j < length; j++)
                    {
                        s += tmp;
                    }
                }
                dt1 = DateTime.Now;
                char[] charArray = null;
                for (int i = 0; i < num; i++)
                {
                    mycom.CommandText = "insert into system.tb1(CINT,CCLOB) values(" + i + ",'a')";
                    mycom.ExecuteNonQuery();
                    mycom.CommandText = "select CINT,CCLOB from system.tb1 where CINT=" + i;

                    dr = mycom.ExecuteReader();
                    dr.Read();
                    clob = dr.GetOracleClobForUpdate(1);
                    clob.Erase();
                    charArray = s.ToCharArray();
                    for (int j = charArray.Length; j >0; j -= 1024 * 1024)
                    {
                        clob.Write(charArray, 0, 1024 * 1024);
                    }

                }
                dt2 = DateTime.Now;

                mycom = new OracleCommand("select * from system.tb1", mycon);
                dr = mycom.ExecuteReader();
                dr.Read();
                Console.WriteLine(dr.GetOracleClob(1).Length / 1024 / 1024 / 2 + "M");
            }
            else
            {
                
                s = "";
                string tmp = "a";
                for (int i = 0; i < 20; i++)
                {
                    tmp += tmp;
                }
                for (int j = 0; j < length; j++)
                {
                    s += tmp;
                }
                dt1 = DateTime.Now;
                for (int i = 0; i < num; i++)
                {
                    mycom.Parameters.Clear();
                    /*
                    para1 = new OracleParameter("p1", OracleDbType.Int32);
                    para2 = new OracleParameter("p2", OracleDbType.Clob);
                    para1.Value = i;
                    para2.Value = s;
                    mycom.Parameters.Add(para1);
                    mycom.Parameters.Add(para2);
                     */
                    mycom.Parameters.Add("p1", OracleDbType.Int32).Value=i;
                    mycom.Parameters.Add("p2", OracleDbType.Clob).Value=s;
                    mycom.ExecuteNonQuery();
                }
                dt2 = DateTime.Now;

                mycom = new OracleCommand("select * from system.tb1", mycon);
                dr = mycom.ExecuteReader();
                dr.Read();
                Console.WriteLine(dr.GetString(1).Length / 1024 / 1024 + "M");
            }

            TimeSpan ts = dt2 - dt1;
            Console.Out.WriteLine("insert time: " + ts.TotalSeconds);
            
        }

        private void select(int num)
        {

            OracleDataReader dr = null;
            string selStr = ""; 
            mycom = new OracleCommand(selStr, mycon);
            DateTime dt1 = DateTime.Now;
            String s;
            for (int i = 0; i < num; i++)
            {
                mycom.CommandText = "select * from system.tb1 where CINT=" + i;
                dr = mycom.ExecuteReader();
                while(dr.Read())
                    s=dr.GetString(1);
                //Console.Out.WriteLine(s.ToString().Length);
                dr.Close();
            }
            DateTime dt2 = DateTime.Now;
            TimeSpan ts = dt2 - dt1;
            Console.Out.WriteLine("select time: " + ts.TotalSeconds);
        }
        

        static void Main(string[] args)
        {
            try
            {
                Program p = new Program();

                Console.Out.WriteLine("please input 3 parameters:");

                Console.Out.WriteLine("1.sql type (insert/select)");
                string sqlType;
                sqlType = Console.In.ReadLine();

                while (!sqlType.Equals("insert") && !sqlType.Equals("select"))
                {
                    Console.Out.WriteLine("sql type is not insert or select,please input insert or select");
                    sqlType = Console.In.ReadLine();
                }

                Console.Out.WriteLine("2.loop time");
                string loopNumStr = Console.In.ReadLine();
                int loopNum = 0;
                try
                {
                    loopNum=Convert.ToInt32(loopNumStr);
                }
                catch (System.Exception e)
                {
                    System.Console.WriteLine(e.Message.ToString());
                }

                Console.Out.WriteLine("3.data length(MB)");
                string dataLengthStr = Console.In.ReadLine();
                int dataLength = 0;
                try
                {
                    dataLength=Convert.ToInt32(dataLengthStr);
                }
                catch (System.Exception e)
                {
                    System.Console.WriteLine(e.Message.ToString());
                }

                p.open();

                if (sqlType.Equals("insert"))
                {
                    p.delete();
                    p.insert(loopNum, dataLength);
                }
                else if (sqlType.Equals("select"))
                {
                    p.select(loopNum);
                }
                p.close();

                Console.In.Read();
            }
            catch (System.Exception e)
            {
                System.Console.WriteLine(e.Message.ToString());
            }
        }

    }
}

 

分享到:
评论

相关推荐

    将长于4000字符的字符串转化为CLOB类型存入数据库

    在C#中操作Oracle数据库通常会用到Oracle.NET接口,其中包括了对CLOB类型的直接支持。 - **创建OracleConnection对象**:首先需要创建一个连接到Oracle数据库的对象。 - **创建OracleCommand对象**:接着创建一...

    sql server中的image类型的数据导出到oracle的clob字段中

    SQL Server 中 Image 类型数据导出到 Oracle 的 CLOB 字段中 在进行数据库迁移或数据交换时,需要将不同数据库管理系统之间的数据类型进行转换。在本文中,我们将讨论如何将 SQL Server 中的 Image 类型数据导出到 ...

    图片存入Oracle中,用clob和blob两种方式

    在数据库管理中,存储非结构化数据...综上所述,`CLOB`和`BLOB`都是在Oracle中存储图片的有效方法,具体选择哪种方式取决于应用场景和需求。`ClobAndBlob`工具提供了一种便捷的方式来体验和比较这两种方式的使用效果。

    oracle blob图片导出工具

    批量导出oracle bolb图片到本地文件

    ado.net读写Oracle大对象

    本篇文章将详细探讨如何使用ADO.NET,特别是C#语言,来读取和写入Oracle数据库中的Blob和Clob大对象。 首先,我们需要了解Oracle的OracleClient提供程序,它是ADO.NET与Oracle数据库进行通信的桥梁。安装Oracle的...

    Oracle.ManagedDataAccess.dll.rar

    Oracle.ManagedDataAccess.dll是Oracle公司为.NET开发者提供的一个托管数据访问组件,它允许C#等.NET语言的应用程序直接与Oracle数据库进行交互,无需依赖传统的Oracle客户端软件。这个RAR压缩包包含了两个不同版本...

    C#中的oracel连接

    在IT领域,尤其是在软件开发与数据库管理中,C#与Oracle数据库的连接是一个常见的需求,尤其是在企业级应用中。本文将深入探讨如何在C#中实现与Oracle数据库的有效连接,包括必要的命名空间引用、连接字符串的配置、...

    Oracle与.Net 数据类型映射

    5. **其他类型**:Oracle的PL/SQL记录和游标类型通常通过OracleDataReader和OracleParameter进行操作。 在.NET开发中,Oracle Data Provider for .NET (ODP.NET) 是连接Oracle数据库的主要组件。它提供了一个...

    C# SQL helper oracleHelper oledbHelper

    - Oracle特有数据类型的支持,如BLOB、CLOB等。 - 处理Oracle特有的错误和异常。 3. OleDbHelper: OleDbHelper是一个更通用的数据库助手,它使用System.Data.OleDb命名空间中的类,可以访问多种支持OLE DB协议...

    ora存、查clob类型帮助文档.txt

    C#。ora存、查clob类型帮助文档。DLL类库下载看我Oracle.ManagerDataAccess.Dll类库。

    Oracle.ManagedDataAccess.dll

    C# 操作oracle查询、存储clob类型数据,经测试此版本可以正常使用。

    oracle ManagedDataAccess连接实例

    Oracle ManagedDataAccess (OMDA) 是Oracle公司提供的一款.NET Framework数据访问组件,它允许开发者在C#等.NET环境中轻松地与Oracle数据库进行交互。Oracle ManagedDataAccess提供了与ADO.NET兼容的接口,使得...

    Oracle.ManagedDataAccess.zip

    Oracle.ManagedDataAccess 是Oracle公司为.NET Framework和.NET Core提供的一款官方驱动,它使得开发者能够方便地在C#等.NET环境中连接和操作Oracle数据库。这个压缩包包含了几个关键组件,帮助我们理解Oracle数据库...

    Oracle.ManagedDataAccess.dll--4.122.19.1版本号

    这个组件允许开发者在C#等.NET语言中无缝地连接和操作Oracle数据库,无需依赖传统的Oracle客户端软件。4.122.19.1是该组件的一个具体版本,通常包含性能优化、bug修复和新功能。 Oracle Managed Data Access (ODP...

    Oracle.DataAccess 64位/32位 各版本集合

    Oracle.DataAccess是Oracle公司提供的.NET数据提供程序,它允许.NET开发者使用C#、VB.NET等语言与Oracle数据库进行交互。这个集合包含的是不同版本的Oracle.DataAccess客户端组件,分别为32位(X86)和64位(X64)版本,...

    Oracle.ManagedDataAccess.rar

    Oracle.ManagedDataAccess是Oracle公司为.NET Framework提供的一款官方的、完全托管的数据访问组件,用于在C#等.NET环境中与Oracle数据库进行交互。这个压缩包包含的核心文件"Oracle.ManagedDataAccess.dll"是Oracle...

    mapxtreme 地图定义 在oraclespatial中的加载与存储

    Oracle Spatial是Oracle数据库系统的一个组件,它提供了对空间数据的支持,使得用户能够在数据库中存储、管理和分析地理信息。本文将详细探讨MapXtreme地图定义在Oracle Spatial中的加载与存储过程。 首先,为了...

    Oracle.DataAccess

    这个组件提供了全面的数据访问功能,包括连接管理、数据查询、事务处理等,使得开发人员能够利用C#、VB.NET或其他.NET语言轻松地操作Oracle数据库。 Oracle.DataAccess 包含了以下关键组件和功能: 1. **ODP.NET**...

    Oracle12c数据库基础教程Oracle12c数据库对象管理.pptx

    Oracle 12c 数据库基础教程 - 数据库对象管理 Oracle 12c 数据库基础教程是学习 Oracle 数据库的基础知识的必修课程。本节课主要介绍 Oracle 数据库中常用的对象管理方法,包括表管理、索引管理、视图管理、序列...

    Pro ODP.NET for Oracle Database 11g

    1. ODP.NET简介:ODP.NET是Oracle公司为.NET平台设计的官方数据提供者,它允许开发者使用C#、VB.NET等.NET语言编写数据库应用程序。相比其他数据提供者,ODP.NET提供了更深层次的Oracle特性和优化,包括对PL/SQL的...

Global site tag (gtag.js) - Google Analytics