注意
  1、操作clob不是blob,其实它两个差不多,不过我不想再试验了!
  2、请用OracleClient不要用oledb;
  3、不要贴微软.net2003的东东,我试了整整一下午了,有错误。
  解决就给分。
  up者有分。
  贴错的不给分,别怪我啊!!!!!

解决方案 »

  1.   

    其实也不用太复杂,能给我个OracleLob类的操作也行啊,
    cmd.Transaction = cmd.Connection.BeginTransaction();        
    //Select some data.
    cmd.CommandText = "SELECT * FROM db1 FOR UPDATE ";
    OracleDataReader reader = cmd.ExecuteReader();
    using(reader)
    { reader.Read();
    //Obtain a LOB.
    OracleLob clob =reader.GetOracleLob(3);
    clob.Write(bt, 0, bt.Length );
    cmd.Transaction.Commit();
                                }
    //这是我试验的代码每次到clob.Write时就出错。说connection closed的,帮帮忙啊!
      

  2.   

    在 Visual C# .NET 中通过使用 ADO.NET 读写 BLOB 数据
    http://support.microsoft.com/default.aspx?scid=kb;zh-cn;309158
      

  3.   

    http://community.csdn.net/Expert/topic/3158/3158135.xml?temp=.2882196
      

  4.   

    不要用oracleLob,用一个byte[]把它读出来。
    建议你拖一个表到窗体上看.net 生成的命令就明白了
      

  5.   

    http://support.microsoft.com/default.aspx?scid=kb;EN-US;322796
    http://otn.oracle.com/oramag/oracle/03-mar/o23odp.htmlhttp://www.codeproject.com/aspnet/upsanddowns.asp
      

  6.   

    System.Data.OleDb.OleDbConnection Con = new System.Data.OleDb.OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;" +"Integrated Security=SSPI;Initial Catalog=northwind");System.String SqlCmd = "INSERT INTO Images (Image, ContentType, ImageDescription, ByteSize) VALUES (?, ?, ?, ?)";System.Data.OleDb.OleDbCommand OleDbCmdObj = new System.Data.OleDb.OleDbCommand(SqlCmd, Con);OleDbCmdObj.Parameters.Add("@Image", System.Data.OleDb.OleDbType.Binary, FileLength).Value = FileByteArray;OleDbCmdObj.Parameters.Add("@ContentType", System.Data.OleDb.OleDbType.VarChar,50).Value = UpFile.ContentType;OleDbCmdObj.Parameters.Add("@ImageDescription", System.Data.OleDb.OleDbType.VarChar,100).Value = txtDescription.Text;OleDbCmdObj.Parameters.Add("@ByteSize", System.Data.OleDb.OleDbType.VarChar,100).Value = UpFile.ContentLength;Con.Open();OleDbCmdObj.ExecuteNonQuery();Con.Close();
      

  7.   

    using System;
    using Fjeptri.DataAccess.DataHelper;
    using System.Data.OracleClient;
    using System.Data;
    using System.IO;
    using System.Windows.Forms;
    using blank;namespace WindowsApplication1
    {
    /// <summary>
    /// Clob 的摘要说明。
    /// </summary>
    public class Clob
    {
    public Clob()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    } public void InsertClob() //插入Clob内容
    {
    //输入文件内容
    Stream stream = Stream.Null;
    OpenFileDialog openFileDialog = new OpenFileDialog();
    openFileDialog.CheckFileExists = true;
    if (openFileDialog.ShowDialog() == DialogResult.OK)
    {
    stream = openFileDialog.OpenFile();
    string fileName = openFileDialog.FileName;
    }
    else
    {
    return;
    }
    stream.Position =0 ;
    StreamReader streamReader = new StreamReader(stream);
    string context = streamReader.ReadToEnd();

    //向数据库提交内容。
    OracleConnection conn = new OracleConnection(ConfigInfo.GetConnectionString());
    if(conn.State == ConnectionState.Closed) 
    {
    conn.Open();
    }
    OracleTransaction transaction =conn.BeginTransaction();
    string Create="insert into tablewithlobs(a,c) values(tablewithlobs_seq.nextval,:Clob)";
    OracleParameter[] param=new OracleParameter[1];
    param[0]=new OracleParameter("Clob",OracleType.Clob);
    param[0].Value = context;
    OracleHelper.ExecuteNonQuery(transaction,CommandType.Text,Create,param); transaction.Commit();
    conn.Close();
    streamReader.Close();
    stream.Close();
    MessageBox.Show("插入成功!");
    } public void ReadCLob(decimal A) //读出Clob内容
    {
    //从数据库读出内容
    string Read = "select c from tablewithlobs where a =:a";
    OracleParameter[] param=OracleHelper.GetCacheParameter(Read);
    if(param==null)
    {
    param=new OracleParameter[1];
    param[0]=new OracleParameter("a",OracleType.Number);
    OracleHelper.CacheParameter(Read,param);
    }
    param[0].Value = A;
    OracleDataReader dr = OracleHelper.ExecuteReader(ConfigInfo.GetConnectionString(),CommandType.Text,Read,param);
    OracleLob clob = OracleLob.Null;
    while(dr.Read())
    {
    clob = dr.GetOracleLob(0);
    }

    //打开保存内容的文件
    string filename =string.Empty;
    byte[] buffer=null;
    SaveFileDialog saveFileDialog = new SaveFileDialog();
    if(saveFileDialog.ShowDialog() == DialogResult.OK)
    {
    filename = saveFileDialog.FileName;
    }
    if(filename == string.Empty)
    {
    MessageBox.Show("请确定保存的文件路径!");
    return;
    } //将Clob类型的内容转化成文件流类型
    buffer = new byte[clob.Length];
    clob.Read(buffer,0,buffer.Length); //将内容写入文件
    FileStream fs= new FileStream(filename,FileMode.OpenOrCreate);
    fs.Write(buffer,0,buffer.Length);
    fs.Close();
    MessageBox.Show("读取成功!");
    }

    public void DeleteClob(decimal A) //删除Clob内容
    {
    OracleConnection conn = new OracleConnection(ConfigInfo.GetConnectionString());
    conn.Open();
    OracleTransaction transaction = conn.BeginTransaction();
    string Delete="delete from tablewithlobs where a=:a";
    OracleParameter[] param=OracleHelper.GetCacheParameter(Delete);
    if(param==null)
    {
    param=new OracleParameter[1];
    param[0]=new OracleParameter("a",OracleType.Number);
    OracleHelper.CacheParameter(Delete,param);
    }
    param[0].Value=A;
    OracleHelper.ExecuteNonQuery(transaction,CommandType.Text,Delete,param);
    transaction.Commit();
    conn.Close();
    MessageBox.Show("删除成功!");
    } public void UpdateBlob(decimal A) //更新Clob内容
    {
    //提交更新的文件内容
    Stream stream = Stream.Null;
    OpenFileDialog openFileDialog = new OpenFileDialog();
    string fileName = openFileDialog.FileName;
    openFileDialog.CheckFileExists = true;
    if (openFileDialog.ShowDialog() == DialogResult.OK)
    {
    stream = openFileDialog.OpenFile();
    }
    else
    {
    return;
    }
    StreamReader streamReader = new StreamReader(stream);
    string Context = streamReader.ReadToEnd(); //更新数据库内容
    string Update = "update tablewithlobs set c = :context where a = :a;";
    OracleConnection conn = new OracleConnection(ConfigInfo.GetConnectionString());
    conn.Open();
    OracleTransaction transaction = conn.BeginTransaction();
    OracleParameter[] param=OracleHelper.GetCacheParameter(Update);
    if(param==null)
    {
    param=new OracleParameter[2];
    param[0]=new OracleParameter("a",OracleType.Number);
    param[1]=new OracleParameter("context",OracleType.Clob);
    OracleHelper.CacheParameter(Update,param);
    }
    param[0].Value = A;
    param[1].Value = Context;
    OracleHelper.ExecuteNonQuery(transaction,CommandType.Text,Update,param);

    transaction.Commit();
    conn.Close();
    streamReader.Close();
    stream.Close();
    MessageBox.Show("更新成功!");
    } }
    }这是我曾经用过的,把clob内容读到指定文件中,说明一下,using Fjeptri.DataAccess.DataHelper是我自己写的一个dll,封装了对oracle数据库的连接,执行等操作,所以有关这方面的代码你要自己写。希望对你有帮助。