調用方法
/// <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;
}
前臺