OracleLob 與 OracleBFile 的區(qū)別在于前者的數(shù)據(jù)存儲在服務器上而不是存儲在操作系統(tǒng)的物理文件中。它也可以是一個讀寫對象,這一點與 OracleBFile 不同(后者始終為只讀)。
若要獲取 OracleLob 對象,請調(diào)用 GetOracleLob 方法。
可以使用如下格式構(gòu)造值為 NULL 的 OracleLob:
OracleLob myLob = OracleLob.Null;-
測試從服務器返回的 LOB 是否為 NULL
if( myLob == OracleLob.Null)
或者
if( myLob.Value == DBNull.Value )
NULL LOB 的行為與零字節(jié) LOB 的相似之處在于,Read 成功并始終返回零字節(jié)。
選擇一個包含空值的 LOB 列可返回 Null。
必須在獲取臨時 LOB 之前開始事務。否則,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ù)庫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 = "這是新的數(shù)據(jù)";
54
55 //
56 // 將新的數(shù)據(jù)值轉(zhuǎn)換成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}
本文出自:億恩科技【mszdt.com】
服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|