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

2014-11-24 17:53:08 · 作者: · 浏览: 0

  若要获取 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 ///


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

  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}