http://www.akadia.com/services/dotnet_read_write_blob.html

解决方案 »

  1.   

    acewang(龍芯*Inside!) 
    能否解释一下
      

  2.   

    用下列代码可以实现txt文件的正常入库,但是doc文件会出现乱码
    SqlConnection con=new SqlConnection(strConn2);
    string filename=UP_File.PostedFile.FileName;
    StreamReader sr=new StreamReader(filePath,Encoding.Default,true);
    String doc=sr.ReadToEnd();
    sr.Close();
    SqlCommand command=new SqlCommand();
    command.CommandType=CommandType.Text;
    command.Connection=con;
    command.CommandText="Update cx_jjsqb Set sqwj=@sqwj where bh=@maxbh";
    SqlParameter parambh=new SqlParameter("@maxbh",SqlDbType.Char,10);
    parambh.Value=maxbh;
    command.Parameters.Add(parambh);
    SqlParameter paramsqwj=new SqlParameter("@sqwj",SqlDbType.Text);
    paramsqwj.Value=doc;
    command.Parameters.Add(paramsqwj);
    con.Open();
    int RowsAffected=command.ExecuteNonQuery();
    con.Close();
      

  3.   

    http://xml.sz.luohuedu.net/xml/ShowList.asp?id=1
    参考一下孟子前辈的“所有格式文件存入SQL SERVER”
      

  4.   

    ///专用于更新oracle大字段的方法
    ///如果你的查询语句里有两个以上结果,将只更新第一行数据,并且应属于第二列,第一列是ID
    ///    因为我们在实际的使用过程中,一般会为有大字段的数据单独建一个表,通过一个ID来关联主表
    ///</summary>
    public static bool UpdateLOBForOracle(string SQLStatement,string Content,
        OracleConnection conn,OracleTransaction Transaction)
    {
        bool bReturn = false;
        OracleCommand command = conn.CreateCommand();
        if (Command.Connection.State != System.Data.ConnectionState.Open)
        {
            return false;
        }
        Command.Transaction = Transaction;
        Command.CommandText = SQLStatement;
        try
        {
            OracleDataReader reader = command.ExecuteReader();
            using(reader)
            {
                OracleLob BLOB = reader.GetOracleLob(1)
                byte[] buffer = System.Text.Encoding.Unicode.GetBytes(Content);
                if (buffer.Length < BLOB.Length)
                {
                    BLOB.SetLength(buffer.Length)
                }
                BLOB.Write(buffer,0,buffer.Length);
                bReturn = true;
            }
        }
        catch
        {
            bReturn = false;
        }
        finally
        {   
        }
        return bReturn;
    }在实际的使用过程中,对于Insert有LOB类型的表,我首先Insert一条记录,把大字段赋值为空,再通过
    上面的UpdateLOBForOracle更新;对于Update有LOB类型的表,直接使用就可以了
    需要注意的是,事物的回滚和提交的时机
    实际使用例子:
    public bool InsertFile(string FName,string Content,out int FID)
    {
        bool bReturn = false;
        FID = 0;
        OracleConnection Connection = new OracleConnection("连接字符串") 
        OracleCommand Command = Connection.CreateCommand();
        if (Command.Connection.State != System.Data.ConnectionState.Open)
        {
            return false;
        }
        Command.Transaction = Command.Connection.BeginTransaction();
        try
        {
            //先插入表中一条记录
            if (InsertBLOB(out FID,string Name,connection,Command.Transction))
            {
                //调用上面的方法
                string SQL = "select FID,FContent from Table1 for Update where FID = ?"
                if (UpdateLOBForOracle(SQL,Content,connection,Command.Transction))
                {
                    bReturn = true;
                    command.Transction.commit();
                }
                else
                {
                    bReturn = false;
                    command.transction.Rollback();
                }
            }
            else
            {
                bReturn = false;
                command.transction.Rollback();
            }
        }
        catch
        {
            bReturn = false;
            command.transction.Rollback();
        }
        finally
        {
            Command.Connection.Close();
        }
        return bReturn;
    }我没有直接一次Insert有LOB类型的表的原因是直接做很容易出错,我现在用经过我测试还是比较稳定,基本
    没有出过错,速度也还可以;但这样做的缺点就是要在逻辑层控制连接和事物,不象其他的一般在数据层写好
    就可以不管连接和事物的处理了。
    还有,由于这里内网和外网是分开的,所以以上代码不是copy出来的,是我看着以前的代码敲的,所以
    有些语法上的错误,大家将就着看吧,欢迎大家指出缺点和改进,我的email:[email protected]
      

  5.   

    如果是对于SQLServer的image类型,处理起来就容易多了,直接把内容转换成二进制再insert或者update就可以了
      

  6.   

    KevinCao(我老婆很小)我非常感谢,可是我还有几个疑问
    OracleConnection ,OracleLob BLOB = reader.GetOracleLob(1)?
    我在asp.net中没看见,能否赐教
      

  7.   

    OracleLob类应该在System.Data.OracleClient命名空间中
      

  8.   

    没有
    System.Data.OracleClient命名空间中
      

  9.   

    那你看看你的framework版本是多少,我是用的1.1
      

  10.   

    KevinCao(我老婆很小),谢谢