.Net处理Oracle中Clob类型字段总结
最近在做项目中用到Clob这个字段,Clob是存储无限长字符的Oracle字段,用的时候网上找资料找了好久,内容不是很多,大部分都不能用,当然也有可以用的,测试了不同版本,整理了一下,给大家在做项目的时候以参考。
表操作
第一种方案很简单,是数据库表中的某个字段是Clob类型,需要对这个表进行增加修改,网上有很多版本,我试了一种最简单的:
new OracleParameter(":Test", OracleType.Clob,System.Text.Encoding.Unicode.GetByteCount(model.Test)),
就是在创建参数的时候指定一个长度,为什么这样写,不是很清楚,我试过超过4000字符存储和修改是没什么问题的。下面给参数赋值直接赋值就行了,就那么简单!
参数操作
第一种是对表中Clob的操作,还有一种情况是,在Oracle中定义的存储过程和函数,参数的类型是Clob类型,如果用第一种方式的话就会报错,字符超过最大,我想是虽然参数类型是Clob但是传过去的是字符,Oracle默认应该是把传过来的值当做字符看待了,第一种不行,就找了另一种实现方法,我们看下:
public static OracleLob GetOracleClob(string strValue)
{
using (OracleConnection connection = new OracleConnection(connectionString))
{
try
{
connection.Open();
string str = strValue;
byte[] array = Encoding.Unicode.GetBytes(str);
if (array.Length % != )
{
array = Encoding.Unicode.GetBytes(str + ' ');
}
OracleCommand lobCmd = connection.CreateCommand();
// 为访问表定义一个游标 clobvar
string cmdSql = "DECLARE clobvar CLOB;";
cmdSql += " begin ";
cmdSql += " dbms_lob.createtemporary(clobvar, false, 0); :tempLob:= clobvar; ";
cmdSql += " end;";
lobCmd.CommandText = cmdSql;
lobCmd.Parameters.Add(new OracleParameter("tempLob", OracleType.Clob)).Direction = ParameterDirection.Output;
lobCmd.ExecuteNonQuery(); // 利用事务处理(必须)
OracleTransaction tx = connection.BeginTransaction();
lobCmd.Transaction = tx; // 定义一个临时变量
OracleLob tempLob = (OracleLob)lobCmd.Parameters["tempLob"].Value;
tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
tempLob.Write(array, , array.Length);
tempLob.EndBatch();
// 提交事务
tx.Commit();
return tempLob;
}
catch (Exception e)
{
throw e;
}
}
}
调用:
parameters[].Value = DbHelperOra.GetOracleClob(TestString);
大家看代码可能明白一些,这里我说下自己的理解,先定义一个Byte,然后拼一个输出Clob类型的字符串,在Oracle执行后输出,然后把Byte写入输出的Clob变量,然后提交事务,我觉得得到的这个Clob类型才是真正的Clob类型,是和Oracle那边是一致的。这边有一个重要的是字符的编码,注意下要和Oracle那边要一致!
.Net处理Oracle中Clob类型字段总结的更多相关文章
- Oracle中Clob类型处理解析:ORA-01461:仅可以插入LONG列的LONG值赋值
感谢原作者:破剑冰-Oracle中Clob类型处理解析 上一篇分析:ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值 最近为Clob字段在插入数据时发现当字符的字节数(一个半角字符一 ...
- Java更新Oracle的clob类型字段
Java更新Oracle的clob类型字段 1.查询该clob字段 2.处理该clob字段查询结果 3.更新该clob字段查询结果 1.查询该clob字段 <select id="se ...
- Oracle中Clob类型处理解析
最近利用NHibernate映射类型为Clob字段在插入数据时发现当字符的字节数(一个半角字符一个字节,一个全角字符两个字节)在2000-4000之间时报错(ORA-01461:仅可以插入LONG列的 ...
- Oracle中Clob类型处理解析 (转)
转:原文:http://blog.csdn.net/pojianbing/article/details/2789426 最近利用NHibernate映射类型为Clob字段在插入数据时发现当 ...
- ORACLE中date类型字段的处理
(1)在英文版本的ORACLE中默认日期格式为'DD-MON-YY',例如'01-JAN-98' 在汉化的中文版本中ORACLE默认日期格式为'日-月-年',例如'21-8月-2003'或'21-8月 ...
- Oracle中varchar2类型字段长度限制使用问题
为纪念中华人民共和国建军90周年,特此一篇,以此纪念,我军威武!!! 一.问题背景 项目中商品发布,却没有保存成功. 二.问题定位 初步判断向数据库中保存时出现了错误,查看日志文件,由于日志文件过大就 ...
- (转载)VB 查询Oracle中blob类型字段,并且把blob中的图片以流的方式显示在Image上
原文摘自:http://heisetoufa.iteye.com/blog/ '模块代码 Private Declare Function CreateStreamOnHGlobal Lib &quo ...
- ORACLE插入DATE类型字段
1 怎样在ORACLE中输入DATE类型的字段 insert into table_name (date_column) values(to_date('2006-06-04','yyyy-mm-dd ...
- oracle中clob字段的使用
oracle中定义了一个字段是clob的,由于用的是ssh的框架,结果在面向对象存取的时候出现clob类型字段和String类型字段的转换问题.开始查阅了clob字段和String字段的相互转换的方法 ...
随机推荐
- Node.js抓取网页
前几天四六级成绩出来(然而我没考),用Node.js做了一个模拟表单提交并抓取数据的Web 总结一下用到的知识,简单的网页抓取大概就是这个流程了 发送Get或Post请求 表单提交,首先弄到原网页提交 ...
- 【转】stopPropagation, preventDefault 和 return false 的区别
因为有父, 子节点同在, 因为有监听事件和浏览器默认动作之分. 使用 JavaScript 时为了达到预期效果经常需要阻止事件和动作执行. 一般我们会用到三种方法, 分别是 stopPropagat ...
- Python之路第一课Day10--随堂笔记(异步IO\数据库\队列\缓存)
本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 RabbitMQ队列 Redis\Memcached缓存 Paramiko SS ...
- Spring缓存框架原理浅谈
运维在上线,无聊写博客.最近看了下Spring的缓存框架,这里写一下 1.Spring 缓存框架 原理浅谈 2.Spring 缓存框架 注解使用说明 3.Spring 缓存配置 + Ehcache(默 ...
- C#_基础,初始化器
对象初始化器 在没有对象初始化器之前,我们创建一个对象大概需要经过这么两个步骤,首先new一个对象,然后给每个字段赋值.而有了对象初始化器之后,原本需要几行代码才能完成的任务变成一行代码就可以完成,简 ...
- openCV C++ 代码笔记
代码片段1 cv_contourMask_step_tmp=cv_contourMask.clone(); cv::Mat maskImage; UIImageToMat(pathimg, maskI ...
- Change the Target Recovery Time of a Database (SQL Server) 间接-checkpoints flushcache flushcache-message
Change the Target Recovery Time of a Database (SQL Server) 间接checkpoints flushcache flushcache-mes ...
- 一步一步学ROP之linux_x64篇
一步一步学ROP之linux_x64篇 一.序 **ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过现代操作系统的各种通用防 ...
- AnguarJS 第一天----Hello World
AngularJS是什么? AngularJS是目前很火的前端JS框架之一, AngularJS的开发团队将其描述为一种构建动态Web应用的结构化框架.它是完全使用JavaScript编写的客户端技术 ...
- 久违的问候-----eclipse中搭建maven项目2016年
好久没有写过博客了,可是一直向别人推荐自己的博客,深感惭愧!今天再次在寒冷之夜继续code,config,write. 接下来,我们就来谈下eclipse中搭建maven web工程的步骤!虽然就是一 ...