簡體   English   中英

如何使用C#和Oracle Data Access Client用長字符串更新Oracle CLOB列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM