zoukankan      html  css  js  c++  java
  • 简单搞一下 System.Data.OracleClient调用带blob、clob等大字段类型参数的存储过程!

    System.Data.OracleClient在插入大字段类型的时候有32K大小限制,据网络收集的一些方法,整理了一下如下(微软企业库示例):

    必须在获取临时 LOB 之前开始事务。否则,OracleDataReader 将不能获取后面的数据。

    还可以通过调用 DBMS_LOB.CREATETEMPORARY 系统存储过程并绑定 LOB 输出参数打开 Oracle 中的临时 LOB。在客户端,临时 LOB 的行为很像基于表的 LOB。例如,要更新临时 LOB,它必须包含在事务中。

    DBMS_LOB.CREATETEMPORARY(
          lob_loc   IN OUT NOCOPY {BLOB | CLOB CHARACTER SET ANY_CS}
        , cache     IN BOOLEAN
        , duration  IN PLS_INTEGER := DBMS_LOB.SESSION
    )

    创建一个存储过程,担任系统中的专职角色,负责将用户的提交的大文本数据与大字段存储前进行一次类型的“转化”(不知道可以这样说不!)

    create or replace procedure proc_create_tmp_clob(p_tmp_clob out clob) 
    is
    begin  
    dbms_lob.createtemporary(p_tmp_clob, false, 0);
    end proc_create_tmp_clob;

    这样就能很好的完成,程序段向oracle数据库端传输大文本、或者html文本片段数据了!

    简单举个例吧-(新增商品详细信息,商品详细信息为html片段)

    先创建一个处理大字段数据的共用方法,如下操作即可!

    publicstatic OracleLob ToByte(object tmpLob, string content)
    {
    try
    {
    OracleLob tempLob
    = (OracleLob)tmpLob;

    System.Text.Encoding enc
    = System.Text.Encoding.Unicode;

    Byte[] b
    = enc.GetBytes(content);

    tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
    tempLob.Write(b,
    0, b.Length);
    tempLob.EndBatch();

    return tempLob;
    }
    catch (Exception ex)
    {
    throw ex;
    }
    }
     

    publicstatic OracleLob ConvertToLob(DataAccess da, string content)
    {
    try
    {

    if(da.Oc.State == ConnectionState.Closed)
    {
    da.Oc.Open();
    }
    OracleParameter mTempLob
    =new OracleParameter("p_tmp_clob", OracleType.Clob);
    mTempLob.Direction
    = ParameterDirection.Output;


    Tools.OracleHelper.ExecuteNonQuery(da.Oc,
    CommandType.StoredProcedure,
    "proc_create_tmp_clob",
    mTempLob);


    if (content ==null|| content =="")
    return (OracleLob)mTempLob.Value;
    return ToByte(mTempLob.Value, content);
    }
    catch(Exception ex)
    {
    throw ex;
    }
    }
    }
    OracleParameter mDesc = new OracleParameter("p_goods_desc", OracleType.Clob);
    mDesc.Value
    = Data.Tools.OracleLobHandler.ConvertToLob(da, goods.Desc.Description);        
    一花一世界 一叶一菩提
  • 相关阅读:
    Spring框架——JdbcTemplate(Spring对Jdbc的封装)
    Spring框架——批处理(batch)和事务(Transaction)
    Spring框架——AOP(面向切面编程)详解
    Spring框架——关于IOC容器和注解的36个小实验
    学习新技术的 10 个建议
    解决 PHP Fatal error: Call-time pass-by-reference has been removed
    mysql下float类型使用一些误差详解
    windows 如何查看端口占用情况
    插件机制
    .net/c#常用框架/中间件简介
  • 原文地址:https://www.cnblogs.com/darjuan/p/2059262.html
Copyright © 2011-2022 走看看