OracleLob 與 OracleBFile 的區(qū)別在于前者的數(shù)據(jù)存儲(chǔ)在服務(wù)器上而不是存儲(chǔ)在操作系統(tǒng)的物理文件中。它也可以是一個(gè)讀寫對(duì)象,這一點(diǎn)與 OracleBFile 不同(后者始終為只讀)。
若要獲取 OracleLob 對(duì)象,請(qǐng)調(diào)用 GetOracleLob 方法。
可以使用如下格式構(gòu)造值為 NULL 的 OracleLob:
OracleLob myLob = OracleLob.Null;-
測(cè)試從服務(wù)器返回的 LOB 是否為 NULL
if( myLob == OracleLob.Null)
或者
if( myLob.Value == DBNull.Value )
NULL LOB 的行為與零字節(jié) LOB 的相似之處在于,Read 成功并始終返回零字節(jié)。
選擇一個(gè)包含空值的 LOB 列可返回 Null。
必須在獲取臨時(shí) LOB 之前開(kāi)始事務(wù)。否則,OracleDataReader 將不能獲取后面的數(shù)據(jù)。
1using System;
2using System.Data;
3using System.Data.OracleClient;
4using System.IO;
5
6namespace ConnectOracle
7{
8 /// <summary>
9 /// Oracle數(shù)據(jù)庫(kù)Clob字段的更新操作
10 /// </summary>
11 public class ConnectionOracle
12 {
13
14 public void UpdateClogData()
15 {
16
17 //
18 // 操作對(duì)象
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 進(jìn)行記錄鎖定
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 // 進(jìn)行修改操作
52 //
53 content = "這是新的數(shù)據(jù)";
54
55 //
56 // 將新的數(shù)據(jù)值轉(zhuǎn)換成byte[]
57 //
58 byte[] buffer = System.Text.Encoding.Unicode.GetBytes(content);
59
60 //
61 // 寫回lob對(duì)象
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}
本文出自:億恩科技【mszdt.com】
服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|