当前位置: 代码迷 >> 其他数据库 >> CUBRID学习笔记 15 Lobs门类数据
  详细解决方案

CUBRID学习笔记 15 Lobs门类数据

热度:113   发布时间:2016-05-05 08:14:27.0
CUBRID学习笔记 15 Lobs类型数据
  • BLOB: Binary large object
  • CLOB: Character large object 
  • 一个二进制 一个字符类型

 

  二进制的读取

CUBRIDCommand cmd = new CUBRIDCommand(sql, conn);DbDataReader reader = cmd.ExecuteReader();while (reader.Read()){    CUBRIDBlob bImage = (CUBRIDBlob)reader[0];    byte[] bytes = new byte[(int)bImage.BlobLength];    bytes = bImage.getBytes(1, (int)bImage.BlobLength);    //...}


更新 clob类型
string sql = "UPDATE t SET c = ?";CUBRIDCommand cmd = new CUBRIDCommand(sql, conn);CUBRIDClob Clob = new CUBRIDClob(conn);//Use the ConnectionString for testingstr = "server=localhost;database=demodb;port=33000;user=public;password="Clob.setString(1, str);CUBRIDParameter param = new CUBRIDParameter();param.ParameterName = "?";param.CUBRIDDataType = CUBRIDDataType.CCI_U_TYPE_CLOB;param.Value = Clob;cmd.Parameters.Add(param);cmd.ExecuteNonQuery();

下面来看个完整的例子
using CUBRID.Data.CUBRIDClient;using System.Diagnostics;using System;using System.IO;using System.Data.Common;namespace LobExample{    class Program    {        private static void ExecuteSQL(string sql, CUBRIDConnection conn)        {            using (CUBRIDCommand cmd = new CUBRIDCommand(sql, conn))            {                cmd.ExecuteNonQuery();            }        }        private static void CreateTestTableLOB(CUBRIDConnection conn)        {            ExecuteSQL("drop table if exists t", conn);            ExecuteSQL("create table t(b BLOB, c CLOB)", conn);        }        private static void CleanupTestTableLOB(CUBRIDConnection conn)        {            ExecuteSQL("drop table if exists t", conn);        }        static void Main(string[] args)        {            CUBRIDConnectionStringBuilder sb = new CUBRIDConnectionStringBuilder("localhost", "demodb", "public", "", "33000");            using (CUBRIDConnection conn = new CUBRIDConnection(sb.GetConnectionString()))            {                conn.Open();                CreateTestTableLOB(conn);                string sql = "insert into t (c) values(?)";                CUBRIDCommand cmd = new CUBRIDCommand(sql, conn);                CUBRIDClob Clob = new CUBRIDClob(conn);                String str = conn.ConnectionString;                StreamReader r = new StreamReader("test.txt");                string writestring = r.ReadToEnd();                r.Close();                Clob.setString(1, writestring);                CUBRIDParameter param = new CUBRIDParameter();                param.ParameterName = "?";                param.CUBRIDDataType = CUBRIDDataType.CCI_U_TYPE_CLOB;                param.Value = Clob;                cmd.Parameters.Add(param);                cmd.ExecuteNonQuery();                cmd.Close();                string sql2 = "SELECT c from t";                using (CUBRIDCommand cmd2 = new CUBRIDCommand(sql2, conn))                {                    DbDataReader reader = cmd2.ExecuteReader();                    while (reader.Read())                    {                        CUBRIDClob cImage = (CUBRIDClob)reader[0];                        string str2 = cImage.getString(1, (int)cImage.ClobLength);                        StreamWriter w = new StreamWriter("testout.txt");                        w.Write(str2);                        w.Close();                        StreamReader r2 = new StreamReader("testout.txt");                        string readstring = r2.ReadToEnd();                        r2.Close();                        Debug.Assert(writestring.Length == readstring.Length, "The inserted CLOB length is not valid!");                        Debug.Assert(writestring.Equals(readstring), "The CLOB was not inserted correctly!");                    }                }                CleanupTestTableLOB(conn);                conn.Close();            }        }    }}