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

namespace Sample77
{
    // 演示通过结果集的锁顶来更新 LOB 数据
    class Program
    {
        static void Main(string[] args)
        {
            // Connect
            string constr = "User Id=scott;Password=tiger;Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.24)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = bjoracle.oracle10g.mynet)))";
            OracleConnection conn = Connect(constr);

            if (conn == null)
                return;

            // Setup
            Setup(conn);

            // BeginTransaction
            OracleTransaction txn = conn.BeginTransaction();
            OracleCommand cmd = new OracleCommand("", conn);

            try
            {
                // Lock the result set using FOR UPDATE clause
                cmd.CommandText = "select story from multimedia_tab for update";

                OracleDataReader reader = cmd.ExecuteReader();
                reader.Read();
                OracleClob clob = reader.GetOracleClob(0);
                Console.WriteLine("Old Data: {0}", clob.Value);

                // Modify the clob column of the row
                string ending = " The end.";
                clob.Append(ending.ToCharArray(), 0, ending.Length);

                // Release the lock
                txn.Commit();

                // Fetch the new data; transaction or locking not required.
                cmd.CommandText = "select story from multimedia_tab";
                reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    clob = reader.GetOracleClob(0);
                    Console.WriteLine("New Data: {0}", clob.Value);
                }
                
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: {0}", ex.Message);
            }
            finally
            {
                // Dispose OracleCommand object
                cmd.Dispose();

                // Close and Dispose OracleConnection object
                conn.Close();
                conn.Dispose();
            }

            // Waiting
            Console.ReadLine();
        }

        // Opening a new Connection
        public static OracleConnection Connect(string connectStr)
        {
            OracleConnection conn = new OracleConnection(connectStr);
            try
            {
                conn.Open();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: {0}", ex.Message);
                conn = null;
            }
            return conn;
        }

        // Setup the necessary Tables & Test Data
        public static void Setup(OracleConnection conn)
        {
            StringBuilder blr;
            OracleCommand cmd = new OracleCommand("", conn);

            blr = new StringBuilder();
            blr.Append("DROP TABLE multimedia_tab");
            cmd.CommandText = blr.ToString();
            try
            {
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Warning: {0}", ex.Message);
            }

            blr = new StringBuilder();
            blr.Append("CREATE TABLE multimedia_tab(thekey NUMBER(4) PRIMARY KEY,");
            blr.Append("story CLOB, sound BLOB)");
            cmd.CommandText = blr.ToString();
            try
            {
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: {0}", ex.Message);
            }

            blr = new StringBuilder();
            blr.Append("INSERT INTO multimedia_tab values(");
            blr.Append("1,");
            blr.Append("'This is a long story.Once upon a time',");
            blr.Append("'898787787874454654564578978971114544897')");
            cmd.CommandText = blr.ToString();

            try
            {
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: {0}", ex.Message);
            }

            blr = new StringBuilder();
            blr.Append("INSERT INTO multimedia_tab values(");
            blr.Append("2,");
            blr.Append("'This is the second long story.Once upon a time',");
            blr.Append("'898787787874454654564578978971114544897')");
            cmd.CommandText = blr.ToString();

            try
            {
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: {0}", ex.Message);
            }
        }
    }
}

注意:
1、创建OracleTransaction对象
2、利用 for update 条款来锁定结果集:cmd.CommandText = "select story from multimedia_tab for update";
3、更新结果集中的第一条记录 reader.Read(); clob.Append(ending.ToCharArray(), 0, ending.Length);
4、提交事务,并释放锁:txn.Commit();
5、循环显示结果:while (reader.Read())

引用:
ODP.NET SAMPLE

转载于:https://www.cnblogs.com/mjgforever/archive/2007/12/28/1018051.html

(原) ODP.NET 演示通过结果集的锁顶来更新 LOB 数据相关推荐

  1. 发布一个免费的 Elasticsearch 多集群监控和管理平台 - 极限数据平台

    随着单个 Elasticsearch 集群规模的越来越大,大家要么在拆集群的路上,要么是已经是多套集群了, 据路边社消息,一个公司超过5个集群的情况已经变得非常普遍,而管理多个集群着实是有点痛苦,比如 ...

  2. cookie追加数据_集算器 SPL 抓取网页数据

    [摘要] 集算器 SPL 支持抓取网页数据,根据抓取定义规则,可将网页数据下载到在本地进行统计分析.具体定义规则要求.使用详细情况,请前往乾学院:集算器 SPL 抓取网页数据! 网站上的数据源是我们进 ...

  3. Apache POI和EasyExcel 第三集:Apache POI的Excel大数据量写入(分为03版的xls、07版的xlsx、升级版SXSSF)

    Apache POI和EasyExcel 第三集:Apache POI的Excel大数据量写入(分为03版的xls.07版的xlsx.升级版SXSSF) 一.结果 我的03跑了1.204秒,07跑了5 ...

  4. zookeeper集群,每个服务器上的数据是相同的,每一个服务器均可以对外提供读和写的服务,这点和redis是相同的,即对客户端来讲每个服务器都是平等的。...

    zookeeper集群,每个服务器上的数据是相同的,每一个服务器均可以对外提供读和写的服务,这点和redis是相同的,即对客户端来讲每个服务器都是平等的.

  5. 【直击DTCC】浪潮霍俊路详解数据库集群锁机制管理

    2016年5月12日-14日,第七届中国数据库技术大会(DTCC 2016)在北京国际会议中心拉开帷幕.今年的大会首次设立了"数据库内核技术"专场,着重突出"内核的实现技 ...

  6. 计量模型、实证stata代码合集,附顶刊示例

    超强整理!计量实证常用代码合集! 1.指标说明: 包含以下资料: 中介效应(三步回归.Sobel检验.Bootstrap自抽样检验) Heckman两阶段回归结果 分组回归(组间系数检验) 工具变量回 ...

  7. 实战演示k8s部署go服务,实现滚动更新、重新创建、蓝绿部署、金丝雀发布

    1 前言 本文主要实战演示k8s部署go服务,实现滚动更新.重新创建.蓝绿部署.金丝雀发布 2 go服务镜像准备 2.1 初始化项目 cd /Users/flying/Dev/Go/go-lesson ...

  8. Apache ZooKeeper - ZooKeeper 集群中 Leader 与 Follower 的数据同步策略

    文章目录 流程图 why ? How ? 何时触发数据同步的机制? 同步哪些数据 同步方式 DIFF 同步 TRUNC+DIFF 同步 TRUNC 同步 SNAP 同步 同步后的处理 源码分析 流程图 ...

  9. 越狱第三季HTTP下载地址,更新至第4集,每周二定时更新

    越狱第三季HTTP下载地址,更新至第2集,每周二定时更新(推荐使用迅雷下载)    [别名] Prison Break(season 3) [地区] 欧美 [类型] 剧情 [导演] 保罗·朔伊林 Pa ...

最新文章

  1. 黄聪:使用srvany.exe将任何程序作为Windows服务运行
  2. .net (object sender, EventArgs e) 学习总结
  3. 批量打印pdf并合并_CAD批量打印攻略
  4. PKG_CONFIG_PATH错误提示解决办法
  5. Spark之Master主备切换机制原理
  6. oracle Sql语句分类
  7. 吉大15秋学期计算机,吉大15秋学期《计算机应用基础》在线作业二.docx
  8. ES5和ES6类的知识
  9. 团队项目需求分析——NABCD
  10. JAVA 如何将String进行大小写转换
  11. 我的世界服务器物品定价,我的世界商店特性官方解答 创作者决定最初定价
  12. 去年中国水上交通安全形势稳定
  13. C/C++动态内存申请与释放
  14. 基于C语言的飞机票预订系统
  15. 【刷题笔记】CG第二周
  16. Android Window悬浮窗窗口全屏(隐藏导航栏状态栏)
  17. iOS-通俗易懂的微信支付接入和爬坑指南,十分钟轻松搞完
  18. java转换docx为doc文件_java使用poi转换doc/docx为pdf
  19. idea debug图解
  20. git远程仓库的创建(养成好的习惯,小马教你提交代码到远程仓库中)

热门文章

  1. 使用服务器测量网站性能,使用服务器时序测量网站性能
  2. java打印图片到页面_在Java中打印BufferedImage的正确方法
  3. swoole 要求php版本,swoole哪个版本支持php5
  4. java unsafe cas_Java Unsafe CAS 小试
  5. c int最小值的宏_C语言宏定义的妙用!用完软硬件效率蹭蹭涨!
  6. 如何知道当前像素的顶点坐标_GT 大神 | 如何高效渲染流体效果(绝对干货)
  7. python语言的实验心得体会范文_实验报告个人心得体会范文
  8. 以及其任何超类对此上下文都是未知的_浏览器原理系列 - JS执行上下文详解(一):作用域
  9. 关于idea plugin测试那些事(纯手工翻译,只为打发时间,如果有错误,欢迎提建议,如果有意见,我相信别家一定更适合你)
  10. 16年寒假随笔(2)