.net富文本編輯器中大文本寫入Oracle(string轉clob)

調用方法

/// <summary>
        /// 用於牽涉到寫入Orcale的string轉clob錄入數據庫
        /// </summary>
        /// <param name="tempClobName">oracle臨時變量名</param>
        /// <param name="strContent">需要封裝到oracle臨時變量裏的strContent</param>
        /// <param name="sql">sql執行語句</param>
        /// <returns></returns>
        public static bool OrcaleSetClob(string tempClobName,string strContent, string sql)
        {
            bool flag = false;
            //============================================ 
            OracleConnection connt = new OracleConnection(ConfigurationSettings.AppSettings["AHPortalConnectionString"]);
            connt.Open();
            //要使用clob必須使用事務,要保證大文本完全被插入,否則失敗
            OracleTransaction oxt = connt.BeginTransaction();
            OracleCommand cmd = connt.CreateCommand();
            try
            {
                //事務負載在command的執行過程中.
                cmd.Transaction = oxt;
                //Step1.創建臨時的Lob 
                //Oracle server syntax to obtain a temporary LOB.
                cmd.CommandText = "DECLARE A clob; BEGIN DBMS_LOB.CREATETEMPORARY(A, FALSE); :LOC := A; END;";
                //Bind the LOB as an output parameter.
                OracleParameter p = cmd.Parameters.Add("LOC", OracleType.Clob);
                p.Direction = ParameterDirection.Output;

                //Execute (to receive the output temporary LOB).
                cmd.ExecuteNonQuery();
                //Return the temporary LOB.
                OracleLob tempLob = (OracleLob)p.Value;
                //Step 2.把文本轉換爲字節數組.
                System.Text.UnicodeEncoding converter = new System.Text.UnicodeEncoding();
                byte[] buffer = converter.GetBytes(strContent);
                //Step 3.把字節數組封裝到OracleLob對象裏面去
                tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
                tempLob.Write(buffer, 0, buffer.Length);
                tempLob.EndBatch();
                cmd.Parameters.Clear();
                //Text方式定義
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.Add(new OracleParameter(tempClobName, OracleType.Clob)).Value = tempLob;
                cmd.CommandText = sql;
                //執行
                flag = cmd.ExecuteNonQuery() > 0 ? true : false;
                oxt.Commit();
                connt.Close();
            }
            catch (Exception)
            {
                flag = false;
                oxt.Commit();
                connt.Close();
            }
            return flag;
        }

前臺

發佈了21 篇原創文章 · 獲贊 10 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章