繁体   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