问题是这样的,我用ASP.NET做的网页。Oracle做数据库,想把大的字符存到数据表中,字段数据类型是CLOB。这个应该是可存储4GB的数据。可是插入超过4000字符时就出现ORA-01704: 字符串文字太长。是字符长度超出了正常的范围。我怎么解决这个问题,在网上也有同志遇到类似的问题。说是用变量和存储过程的方式可以解决。但我试过变量了,还是不行。存储过程对我初学Oracle者来说能力很有限。希望大家能帮我解决,我将不胜感激。我的插入代码是:        string neirong = txtnr.Text.Trim();(要插入的内容)
        string insertsql = "insert into news(newid,newbt,newnr)values(newid.nextval,'" + txtbt.Text.Trim() + "','" + neirong + "')";
        dbzh.execsql(insertsql);(类里的方法)
        ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "", "<script>alert('添加成功!');</script>", false);
        txtbt.Text = "";
        txtnr.Text = "";
最好帮修改代码:谢谢!

解决方案 »

  1.   

    http://topic.csdn.net/t/20061018/09/5090287.html
    看看这个对你有帮助没有,照官方的说法,需要绑定变量
      

  2.   

    http://topic.csdn.net/t/20051013/10/4323377.html
      

  3.   

    既然提示ORA-01704建议转到oracle板块
      

  4.   

    跟一下,看看是不是 sql那一行 报错。如果是的,就的修改你的sql语句。
      

  5.   

    之所以会出现长度大于4000时报错,是因为Oracle中有SQL语句中两个单引号之间的字符数不能大于4000的限制。'" + data + "' data在sql语句之间,当data的值大于4000个字节时就会报错。string id = Guid.NewGuid().ToString(); 
    OracleCommand cmd = Conn.CreateCommand(); 
    cmd.CommandText = "insert into xx(id,test) values('" + id + "',:p1)"; 
    OracleParameter p1 = new OracleParameter("p1", OracleType.Clob); 
    p1.Value = data; // data是一个变量,存储你要插入的字符串 
    cmd.Parameters.Add(p1); 
    cmd.ExecuteNonQuery(); 
    采用这种方式能够正常插入。
      

  6.   

    问题搞定了.(人生如梦)给的这个贴应该可以解决,但对我这样的菜鸟有些看不懂,不好意思。(混个脸儿熟)这个代码可以解决,这个看得懂点。非常感谢。我修改后的代码:
            OracleConnection con = new OracleConnection(dbcon.conn());
            con.Open();
            OracleCommand cmd = con.CreateCommand();
            cmd.CommandText = "insert into news(newid,newbt,newnr) values(newid.nextval,'" + txtbt.Text.Trim() +"',:p1)";
            OracleParameter p1 = new OracleParameter("p1", OracleType.Clob);
            p1.Value = neirong; 
            cmd.Parameters.Add(p1);
            cmd.ExecuteNonQuery();
            con.Close();