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());
}
}
}
}
分享到:
相关推荐
在C#中操作Oracle数据库通常会用到Oracle.NET接口,其中包括了对CLOB类型的直接支持。 - **创建OracleConnection对象**:首先需要创建一个连接到Oracle数据库的对象。 - **创建OracleCommand对象**:接着创建一...
SQL Server 中 Image 类型数据导出到 Oracle 的 CLOB 字段中 在进行数据库迁移或数据交换时,需要将不同数据库管理系统之间的数据类型进行转换。在本文中,我们将讨论如何将 SQL Server 中的 Image 类型数据导出到 ...
在数据库管理中,存储非结构化数据...综上所述,`CLOB`和`BLOB`都是在Oracle中存储图片的有效方法,具体选择哪种方式取决于应用场景和需求。`ClobAndBlob`工具提供了一种便捷的方式来体验和比较这两种方式的使用效果。
批量导出oracle bolb图片到本地文件
本篇文章将详细探讨如何使用ADO.NET,特别是C#语言,来读取和写入Oracle数据库中的Blob和Clob大对象。 首先,我们需要了解Oracle的OracleClient提供程序,它是ADO.NET与Oracle数据库进行通信的桥梁。安装Oracle的...
Oracle.ManagedDataAccess.dll是Oracle公司为.NET开发者提供的一个托管数据访问组件,它允许C#等.NET语言的应用程序直接与Oracle数据库进行交互,无需依赖传统的Oracle客户端软件。这个RAR压缩包包含了两个不同版本...
在IT领域,尤其是在软件开发与数据库管理中,C#与Oracle数据库的连接是一个常见的需求,尤其是在企业级应用中。本文将深入探讨如何在C#中实现与Oracle数据库的有效连接,包括必要的命名空间引用、连接字符串的配置、...
5. **其他类型**:Oracle的PL/SQL记录和游标类型通常通过OracleDataReader和OracleParameter进行操作。 在.NET开发中,Oracle Data Provider for .NET (ODP.NET) 是连接Oracle数据库的主要组件。它提供了一个...
- Oracle特有数据类型的支持,如BLOB、CLOB等。 - 处理Oracle特有的错误和异常。 3. OleDbHelper: OleDbHelper是一个更通用的数据库助手,它使用System.Data.OleDb命名空间中的类,可以访问多种支持OLE DB协议...
C#。ora存、查clob类型帮助文档。DLL类库下载看我Oracle.ManagerDataAccess.Dll类库。
C# 操作oracle查询、存储clob类型数据,经测试此版本可以正常使用。
Oracle ManagedDataAccess (OMDA) 是Oracle公司提供的一款.NET Framework数据访问组件,它允许开发者在C#等.NET环境中轻松地与Oracle数据库进行交互。Oracle ManagedDataAccess提供了与ADO.NET兼容的接口,使得...
Oracle.ManagedDataAccess 是Oracle公司为.NET Framework和.NET Core提供的一款官方驱动,它使得开发者能够方便地在C#等.NET环境中连接和操作Oracle数据库。这个压缩包包含了几个关键组件,帮助我们理解Oracle数据库...
这个组件允许开发者在C#等.NET语言中无缝地连接和操作Oracle数据库,无需依赖传统的Oracle客户端软件。4.122.19.1是该组件的一个具体版本,通常包含性能优化、bug修复和新功能。 Oracle Managed Data Access (ODP...
Oracle.DataAccess是Oracle公司提供的.NET数据提供程序,它允许.NET开发者使用C#、VB.NET等语言与Oracle数据库进行交互。这个集合包含的是不同版本的Oracle.DataAccess客户端组件,分别为32位(X86)和64位(X64)版本,...
Oracle.ManagedDataAccess是Oracle公司为.NET Framework提供的一款官方的、完全托管的数据访问组件,用于在C#等.NET环境中与Oracle数据库进行交互。这个压缩包包含的核心文件"Oracle.ManagedDataAccess.dll"是Oracle...
Oracle Spatial是Oracle数据库系统的一个组件,它提供了对空间数据的支持,使得用户能够在数据库中存储、管理和分析地理信息。本文将详细探讨MapXtreme地图定义在Oracle Spatial中的加载与存储过程。 首先,为了...
这个组件提供了全面的数据访问功能,包括连接管理、数据查询、事务处理等,使得开发人员能够利用C#、VB.NET或其他.NET语言轻松地操作Oracle数据库。 Oracle.DataAccess 包含了以下关键组件和功能: 1. **ODP.NET**...
Oracle 12c 数据库基础教程 - 数据库对象管理 Oracle 12c 数据库基础教程是学习 Oracle 数据库的基础知识的必修课程。本节课主要介绍 Oracle 数据库中常用的对象管理方法,包括表管理、索引管理、视图管理、序列...
1. ODP.NET简介:ODP.NET是Oracle公司为.NET平台设计的官方数据提供者,它允许开发者使用C#、VB.NET等.NET语言编写数据库应用程序。相比其他数据提供者,ODP.NET提供了更深层次的Oracle特性和优化,包括对PL/SQL的...