天天看点

设置oracle中的blob字段,将xml文件写入到数据库中

http://hi.baidu.com/net1979/blog/item/1829e14ee7d26c0db2de0569.html

可以将二进制大对象 (BLOB) 作为二进制或字符数据写入数据库,具体视数据源的字段类型而定。若要将 BLOB 值写入数据库,请发出相应的 INSERT 或 UPDATE 语句并将 BLOB 值作为输入参数传递如果 BLOB 存储为文本格式(如 SQL Server text 字段),则可将 BLOB 作为字符串参数传递。如果 BLOB 存储为二进制格式(如 SQL Server image 字段),则可将类型 byte 的数组作为二进制参数传递。

注意
BLOB 可能相当大,因此在作为单个值写入时可能要使用大量的系统内存,从而降低应用程序的性能。若要减少写入 BLOB 值时所使用的内存量,可以按“块”将 BLOB 写入数据库。我这里只是把xml文件一次性存进数据库,没有分块,因为我用的xml文件不是很大。

/// <summary>

    /// 设置BLOB

    /// </summary>

    /// <param name="inst_id">实例编号</param>

    /// <param name="xmlFrom">xml文件</param>

    private void setBlob(string inst_id,XmlDocument xmlFrom)

    {  

        //将xmld存入流程实例表       

        OracleConnection con = GenericClassOra.connect();   //连接数据库,自已写的方法       

        //页面要设置成gb2312: ResponseEncoding="gb2312",根据情况,如果你的是utf-8

        byte[] ddd = System.Text.Encoding.Default.GetBytes(xmlFrom.InnerXml);        

      //这是要更新哪一条的SQL语句

        string strSQL = "update 表名set blob字段名=:ddd where id='" + inst_id + "'";

        try

        {

            con.Open();

            OracleCommand comd = new OracleCommand(strSQL, con);

            comd.CommandType = CommandType.Text;

            comd.CommandText = strSQL;

            comd.Parameters.Add("ddd", System.Data.OracleClient.OracleType.Blob).Value = ddd;

            comd.ExecuteNonQuery();

        }

        catch(Exception ex)

        {            

            throw ex;

        }

        finally

        {

            if (con.State == ConnectionState.Open)

            {

                con.Close();

            }

        }

    }