zoukankan      html  css  js  c++  java
  • Oracle数据库Clob字段的更新操作

    Oracle数据库Clob字段的更新操作

    OracleLob 与 OracleBFile 的区别在于前者的数据存储在服务器上而不是存储在操作系统的物理文件中。它也可以是一个读写对象,这一点与 OracleBFile 不同(后者始终为只读)。

    若要获取 OracleLob 对象,请调用 GetOracleLob 方法。

    可以使用如下格式构造值为 NULL 的 OracleLob:
    OracleLob myLob = OracleLob.Null;

    测试从服务器返回的 LOB 是否为 NULL
    if( myLob == OracleLob.Null)
    或者
    if( myLob.Value == DBNull.Value )

    NULL LOB 的行为与零字节 LOB 的相似之处在于,Read 成功并始终返回零字节。

    选择一个包含空值的 LOB 列可返回 Null。

    必须在获取临时 LOB 之前开始事务。否则,OracleDataReader 将不能获取后面的数据。

     1using System;
     2using System.Data;
     3using System.Data.OracleClient;
     4using System.IO;
     5
     6namespace ConnectOracle
     7{
     8    /// <summary>
     9    /// Oracle数据库Clob字段的更新操作
    10    /// </summary>

    11    public class ConnectionOracle
    12    {
    13
    14        public void UpdateClogData()
    15        {
    16
    17            //
    18            // 操作对象
    19            //
    20            OracleLob lob;
    21            OracleTransaction txn = null;
    22            OracleConnection conn = null;
    23            OracleCommand cmd = null;
    24            OracleDataReader dr = null;
    25            string strSql = string.Empty;
    26            string content = string.Empty;
    27            string CONNECTSTRING = "User ID=xxxx; Password=xxxx; Data Source=cmsdb_192.168.0.1";
    28
    29            try
    30            {
    31                conn = new OracleConnection(CONNECTSTRING);
    32                conn.Open();
    33                txn = conn.BeginTransaction();
    34                cmd = new OracleCommand(strSql,conn, txn);
    35
    36                //
    37                // 注意这里的 FOR UPDATE 进行记录锁定
    38                //
    39                cmd.CommandText = "SELECT content FROM mytable FOR UPDATE";
    40                dr = cmd.ExecuteReader();
    41                dr.Read();
    42
    43                while(dr.Read())
    44                {
    45                    lob = dr.GetOracleLob(0);
    46                    if(lob!=OracleLob.Null)
    47                    {
    48                        content = lob.Value.ToString();
    49
    50                        //
    51                        // 进行修改操作
    52                        //
    53                        content = "这是新的数据";
    54                                
    55                        //
    56                        // 将新的数据值转换成byte[]
    57                        //
    58                        byte[] buffer = System.Text.Encoding.Unicode.GetBytes(content);
    59
    60                        //
    61                        // 写回lob对象
    62                        //
    63                        lob.Write(buffer, 0, buffer.Length);
    64                    }

    65
    66                }

    67                // 提交操作
    68                txn.Commit();
    69                Console.WriteLine("===============Success================");
    70            }

    71            catch(Exception ex)
    72            {
    73                Console.WriteLine("Error: {0}", ex.ToString());
    74            }

    75            finally
    76            {
    77                dr.Close();
    78                conn.Close();
    79                cmd.Dispose();
    80            }

    81        }

    82
    83    }

    84}

    85

    MSDN上关于OracleLob 类的操作说明
    ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfsystemdataoracleclientoraclelobclasstopic.htm

  • 相关阅读:
    Shell之sed用法 转滴
    再议mysql 主从配置
    CentOS 如何将.deb 文件 转换.rpm
    scp命令[转]
    安装samba服务器
    xdebug影响php运行速度
    PHP中VC6、VC9、TS、NTS版本的区别与用法详解
    将Centos的yum源更换为国内的阿里云源
    centos网卡错误Device eth0 does not seem to be present
    虚拟机VirtualBox中centos6.5网络设置
  • 原文地址:https://www.cnblogs.com/baddot/p/228504.html
Copyright © 2011-2022 走看看