你的位置:首页 > 数据库

[数据库]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();      }    }  }}