那位大虾有.NET读写ORACLE CLOB字段的代码,急啊!!!!

解决方案 »

  1.   

    读的话直接用SQL语句即可。
    string strCmd="Select Photo From tblname Where photoid="@in_PhotoID";
    OracleConnection Conn=new OracleConnection ("connStr");
    OracleCommand Cmd=new OracleCommand(strCmd,Conn);
    Cmd.CommandType=CommandType.Text;

    Cmd.Parameters.Add("@in_PhotoID",OracleType.VarChar,10);
    Cmd.Parameters["@in_PhotoID"].Value="123";Conn.Open();
    OracleDataReader Dr=Cmd.ExecuteReader();
    //
    if(Dr.Read())
    {
    byte[] btImage = (byte[])Dr["Photo"];
    Response.Clear();
    //向客户端发送当前缓冲区的所有内容
    Response.Flush();
    Response.BinaryWrite( btImage );
    }// 
      

  2.   

    写可以参照MSDN文档
    ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfsystemdataoracleclientoraclelobclasstopic.htm具代码如下:
    OracleConnection conn = new OracleConnection("server=MyServer; integrated security=yes;");
    conn.Open();
    OracleTransaction tx = conn.BeginTransaction();
    OracleCommand cmd = conn.CreateCommand();
    cmd.Transaction = tx;
    cmd.CommandText = "declare xx blob; begin dbms_lob.createtemporary(xx, false, 0); :tempblob := xx; end;";
    cmd.Parameters.Add(new OracleParameter("tempblob", OracleType.Blob)).Direction = ParameterDirection.Output;
    cmd.ExecuteNonQuery();
    OracleLob tempLob = (OracleLob)cmd.Parameters[0].Value;
    tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
    tempLob.Write(tempbuff,0,tempbuff.Length);
    tempLob.EndBatch();
    cmd.Parameters.Clear();
    cmd.CommandText = "myTable.myProc";
    cmd.CommandType = CommandType.StoredProcedure;  
    cmd.Parameters.Add(new OracleParameter("ImportDoc", OracleType.Blob)).Value = tempLob;
    cmd.ExecuteNonQuery();
    tx.Commit();
      

  3.   

    若要获取 OracleLob 对象,请调用 GetOracleLob 方法。可以使用如下格式构造值为 NULL 的 OracleLob:OracleLob myLob = OracleLob.Null;该技术主要用于测试从服务器返回的 LOB 是否为 NULL,如此示例所示:if( myLob == OracleLob.Null)NULL LOB 的行为与零字节 LOB 的相似之处在于,Read 成功并始终返回零字节。选择一个包含空值的 LOB 列可返回 Null。必须在获取临时 LOB 之前开始事务。否则,OracleDataReader 将不能获取后面的数据。还可以通过调用 DBMS_LOB.CREATETEMPORARY 系统存储过程并绑定 LOB 输出参数打开 Oracle 中的临时 LOB。在客户端,临时 LOB 的行为很像基于表的 LOB。例如,要更新临时 LOB,它必须包含在事务中。下面的 C# 示例阐释如何打开一个临时 LOB。
      

  4.   

    .NET Data Access Architecture Guide
    http://msdn.microsoft.com/data/default.aspx?pull=/library/en-us/dnbda/html/daag.asp#daag_handlingblobs