当 sql语句超过4000个字符,怎么处理
string abcd = string.Empty;
abcd = Bodytxt.Text.Replace("'", "");
char[] chars = abcd.ToCharArray();
string addstr = "update test set teest='" + chars + "'";
ManagerDB.command(addstr);
显示的时候是 System.Char[]
怎么才能形式真实的字符啊
问题点数:100、回复次数:41Top
1 楼xingyaohua(邢跃华)回复于 2006-10-18 12:40:05 得分 100
upTop
2 楼aafshzj(生活需要breakthrough)回复于 2006-10-18 12:41:45 得分 0
为什么不用string,非要char[]?
欢迎大家来我的博客作客:http://blog.csdn.net/aafshzj/
我正在写一系列关于AAF组件框架的文章。该框架能对开发工作提供很多帮助,并极大地提高开发效率。希望大家看一看并提出宝贵建议。
Top
3 楼lenlong(lenlong(.net 空间 120元年100M,sqlserver数据库200元每年))回复于 2006-10-18 12:47:41 得分 0
abcd 是一个很长的字符串,报ORA-01704: 文字字符串过长 错误了啊Top
4 楼diandian82(点点(nothing))回复于 2006-10-18 12:51:53 得分 0
upTop
5 楼shoutor(www.mouxiao.com)回复于 2006-10-18 12:52:03 得分 0
纳闷,可以使用string啊Top
6 楼lenlong(lenlong(.net 空间 120元年100M,sqlserver数据库200元每年))回复于 2006-10-18 12:52:37 得分 0
abcd 是一个很长的字符串,报ORA-01704: 文字字符串过长 错误了啊
Top
7 楼viena(维也纳N02)回复于 2006-10-18 12:53:38 得分 0
恐怕不是字符串的问题,字符串长度是没有限制的,理论上可以达到二十亿个字符~Top
8 楼aafshzj(生活需要breakthrough)回复于 2006-10-18 12:54:24 得分 0
错误了就自己截断啊,否则还是会出错,除非你换类型并且用chunk by chunk的方法写进去。Top
9 楼viena(维也纳N02)回复于 2006-10-18 12:55:36 得分 0
用StringBuilder试下可不可以Top
10 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2006-10-18 12:56:51 得分 0
参数,你的查询(DBCommand)要使用 DBParameter 参数提交动态部分,拼接 SQL 命令应该仅仅用于形成命令结构而不应该用于提交数据部分。Top
11 楼lenlong(lenlong(.net 空间 120元年100M,sqlserver数据库200元每年))回复于 2006-10-18 12:59:08 得分 0
截断 还有什么用啊,昏,我就要完整的啊Top
12 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2006-10-18 13:06:28 得分 0
楼上你说的空间是哪个公司的?服务器设在哪里(哪个机房)?有没有测试页面可以访问?Top
13 楼lenlong(lenlong(.net 空间 120元年100M,sqlserver数据库200元每年))回复于 2006-10-18 13:09:58 得分 0
http://www.donetbbs.com 开源论坛Top
14 楼chentianfen(yi)回复于 2006-10-18 13:11:26 得分 0
chars 这个错了,它返回的是类型,所以你得到它,并没有什么不对,建议你使用存储过程,然后直接添加,用StringBuilder,至于存储过程的长度你不要设置,overTop
15 楼lenlong(lenlong(.net 空间 120元年100M,sqlserver数据库200元每年))回复于 2006-10-18 13:12:18 得分 0
Oracle 真是狗屎,其他数据库直接插就行的了Top
16 楼cancerser(都是混饭吃,记得要结帖)回复于 2006-10-18 13:13:20 得分 0
Oracle没存储过程啊?Top
17 楼shalen520(Love will keep us alive)回复于 2006-10-18 13:13:55 得分 0
使用参数Top
18 楼aafshzj(生活需要breakthrough)回复于 2006-10-18 13:15:00 得分 0
我说了,你要传超过长度限制的就要用chun by chunk的办法,一段一段写进去,具体看着个吧:
http://msdn2.microsoft.com/en-us/library/cydxhzhz.aspxTop
19 楼lenlong(lenlong(.net 空间 120元年100M,sqlserver数据库200元每年))回复于 2006-10-18 13:29:56 得分 0
upTop
20 楼shuen(ShiningStone)回复于 2006-10-18 13:36:18 得分 0
那你就用大文本Top
21 楼shuen(ShiningStone)回复于 2006-10-18 13:38:26 得分 0
OpenConnection();
OracleCommand myCommand = new OracleCommand("UPDATE "+tableName+" SET " +contentFieldName+" = :content " +"WHERE "+keyFieldName+" ="+keyValue);
myCommand.Connection = this.m_OracleConnection;
myCommand.Parameters.Add(new OracleParameter("content",fieldType, fieldContent.Length,contentFieldName));
myCommand.Parameters["content"].Value = fieldContent;
myCommand.ExecuteNonQuery();
myCommand.Dispose();
这是一段代码Top
22 楼myminimouse(坚决不用baidu)回复于 2006-10-18 14:02:42 得分 0
这个有意思Top
23 楼qhdream()回复于 2006-10-18 14:09:37 得分 0
chars 这个错了,它返回的是类型,所以你得到它,并没有什么不对,建议你使用存储过程,然后直接添加,用StringBuilder,至于存储过程的长度你不要设置,over
支持Top
24 楼lenlong(lenlong(.net 空间 120元年100M,sqlserver数据库200元每年))回复于 2006-10-18 14:12:28 得分 0
一定要用sql 直接操作啊Top
25 楼lenlong(lenlong(.net 空间 120元年100M,sqlserver数据库200元每年))回复于 2006-10-18 14:13:15 得分 0
难道非要先插入一个null,然后再一段一段更新吗?那Oracle 也太垃圾了吧Top
26 楼lenlong(lenlong(.net 空间 120元年100M,sqlserver数据库200元每年))回复于 2006-10-18 14:19:47 得分 0
upTop
27 楼Batiraul(Bati4Ever)回复于 2006-10-18 14:47:51 得分 0
拆分你的sql的功能,先用一段sql完成一部分工作再用另写sql完成剩余工作Top
28 楼lenlong(lenlong(.net 空间 120元年100M,sqlserver数据库200元每年))回复于 2006-10-18 15:35:33 得分 0
如果要插入60000个字符呢,那要更新20次了,昏Top
29 楼sine_cai()回复于 2006-10-18 16:08:53 得分 0
呵呵,这是对SQL语句长度的限制,Oracle中一个SQL语句最大只能支持4K。你这个更新可以不用insert或update语句,改为使用datatable的更新应该可以(没试过)。不过以前使用ADO时也是同样的错误,后来改为open一个dataset,然后使用dataset的赋值方式就可以了。Top
30 楼mryang9118(采芹人)回复于 2006-10-18 16:31:46 得分 0
用大文本啊!
读写数据流Top
31 楼kokubo_wing(假装父母富裕是违法行为)回复于 2006-10-18 16:35:40 得分 0
就是sql你不能把它截断再插入啊Top
32 楼sunbird69(太阳鸟)回复于 2006-10-18 16:45:39 得分 0
markTop
33 楼lenlong(lenlong(.net 空间 120元年100M,sqlserver数据库200元每年))回复于 2006-10-18 17:06:55 得分 0
自己弄好了
怎么给分给自己啊?Top
34 楼noyester()回复于 2006-10-18 17:16:27 得分 0
先把分给我,然后我转给你 :)Top
35 楼Batiraul(Bati4Ever)回复于 2006-10-18 18:00:18 得分 0
倒,还有这样给自己分的,不大方哈。
话说,没功劳也有苦劳啊,难怪信誉分不高Top
36 楼lenlong(lenlong(.net 空间 120元年100M,sqlserver数据库200元每年))回复于 2006-10-18 18:14:34 得分 0
你们的回答都没用到啊,这叫我怎么给分啊Top
37 楼loveyzy(菌哥)回复于 2006-10-18 19:27:44 得分 0
http://blog.csdn.net/zjcxc/archive/2003/12/29/20075.aspx
邹健的文章Top
38 楼Csharp110(~泰山~)回复于 2006-10-18 20:30:23 得分 0
学习了!Top
39 楼fangxinggood(JustACoder)回复于 2006-10-18 20:58:25 得分 0
应该使用BLOB字段:
----------------------------
我在编写应用时,需要大量的插入大文本,但是oracle 的clob操作起来比较繁琐,应此我没有选择使用clob,而是使用了oracle以前版本中的long类型[但是long类型有一些限制,在一个表中只能有一个long字段]。
开始的时候我直接使用insert into table1 values(a,b[long])的方式插入数据库,但是oracle有些限制一条语句不能超过4000个字符,并报ORA-01704的错误。
经过查找oracle 的文档找到了解决的方法,就是对于long的字段使用setCharacterStream()方法将String插入数据库。
代码:
sql="insert into msg_info values (?,?,?,?[long类型字段],'C',sysdate,sysdate+"+msgterm+",?)";
pstat1 = conn.prepareStatement(sql);
pstat1.setLong(1, msg_id);
pstat1.setInt(2, msg_gp_id);
pstat1.setString(3, msg_title);
pstat1.setCharacterStream(4,new StringReader(msg_info.toString()),msg_info.length());
conn.commit();
pstat1.setLong(5, this.upid);Top
40 楼siugwan(开怀)回复于 2006-10-18 21:50:13 得分 0
sql 2005 的 话 支 持 varchar(max)类 型Top
41 楼levin9(生活就是強姦,習慣啦就是享受)回复于 2006-10-18 21:56:00 得分 0
恐怕不是,
char[] 不好.
将数据库该为text型Top




