天天看點

設定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();

            }

        }

    }