[英]How to update Oracle CLOB column with long string using C# and Oracle Data Access Client
我試圖用包含電子郵件HTML內容的長字符串更新數據庫中的CLOB列。 我遇到問題的記錄中有18,000個字符。
如果將html變量設置為“短字符串”,則以下代碼將起作用。 但是,如果我嘗試使用長18,000個字符的HTML字符串運行代碼,則會出現以下錯誤:“ Oracle.DataAccess.Client.OracleException ORA-22922:不存在的LOB值ORA-02063:來自((servername))的前一行”
public static void UpdateHtmlClob(string html, string taxId,string un, string pw)
{
using (OracleConnection conn = new OracleConnection())
{
try
{
conn.ConnectionString = "User Id=" + un + ";Password=" + pw + ";Data Source=server.com;";
conn.Open();
OracleCommand cmd = new OracleCommand();
string indata = html;
cmd.CommandText = "UPDATE table1 SET HTML_BODY = :clobparam";
OracleParameter clobparam = new OracleParameter("clobparam", OracleDbType.Clob, indata.Length);
clobparam.Direction = ParameterDirection.Input;
clobparam.Value = indata;
cmd.Parameters.Add(clobparam);
cmd.Connection = conn;
cmd.ExecuteNonQuery();
conn.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
conn.Close();
}
}
}
在編輯代碼以反映我的答案之前,我發現您的代碼存在兩個問題。
首先,您需要在命令文本中使用冒號來告訴Oracle clobparam
是綁定變量,而不是列名:
cmd.CommandText = "UPDATE table1 SET HTML_BODY = :clobparam";
其次,您沒有在命令的任何地方設置數據庫連接。 該命令應使用哪個連接? 在您的情況下,您只有一個連接,但更普遍的是,可能會打開多個連接。 添加行
cmd.Connection = connection;
或者使用以下命令創建命令
OracleCommand cmd = connection.CreateCommand();
當然,如果Oracle.DataAccess返回一條錯誤消息,使您絲毫沒有暗示這是您做錯了,那將很好。
無論如何,既然您已經編輯了問題以包括關鍵細節ORA-02063: preceding line from ((servername))
,它告訴我們您正在使用數據庫鏈接,我真正能做的就是回顯我在其中寫的內容注釋:直接連接到遠程數據庫以傳輸LOB數據,請勿使用數據庫鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.