小不点的博客

导航

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

 

posted on 2005-09-02 10:25  小不点2018  阅读(4198)  评论(0编辑  收藏  举报