难度1.1-----------ODBC的BUG:无法保存长文本

guo 2000-12-26 05:06:00
有一个高难度问题:当我通过ODBC将一篇长文件(已经确认与长度无关)保存进TEXT(SQL7)类型的字段,当我重新读取时发现字数少了,读出的文本被剪短.而使用OLEDB FOR SQLSERVER 则可正常操作.
...全文
208 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
skt985 2001-06-01
  • 打赏
  • 举报
回复
84808关注!
guo 2001-01-04
  • 打赏
  • 举报
回复
你好 happlaodu,我也曾经不做任何特殊的修改将7M文本添加到SQLSERVER中,但我手头有一篇文章只有48k却无法将其正常加入(加入后读出,长度不同),我将该文件寄给你希望比我运气好.
happylaodu 2001-01-03
  • 打赏
  • 举报
回复
原因出在RFX上。

记录集交换函数:
void RFX_Text( CFieldExchange* pFX, const char* szName, CString& value,
int nMaxLength = 255, int nColumnType = SQL_VARCHAR, short nScale = 0 );
中, 不要使用默认参数值 nMaxLength = 255, 显示制定这个值为你的最大长度便可!
理论上这个值能达到INT_MAX,即2147483647,但如果真把它改到这么大,先是出错(在打开该表的时候出错,跟踪进去看,原来是在绑定的时候出错)可见不能设这么大。稍微改小一点呢?改为200000000,在打开表的时候,机器忙了足有两分钟,最后告诉我说系统的缓存太小,要作调整(我的缓存可是有300M的,还说小),吓得赶快终止。证明绑定的进候,实际上要在内存中开辟一块缓冲给记录集,而像上面那样设,它要开出将近200M空间出来,怪不着这么难。 最后设为2000000,即200万字节(100万字),打开时会有近半秒的闪动,可以忍受。

我在数据库中放入2MB的文本成功。

我的地址:happylaodu@21cn.com
guo 2001-01-03
  • 打赏
  • 举报
回复
我知道INSERT语句的长度有限制,但我使用profile得到的sql语句和使用ADO时(正常)的相同。从INSERT的截断的情况看,不是由于该语句太长,似乎是text字段中的特殊东西(不是字符)。比如我想 insert into tb (a,b,c) values(1,'dkdkdkdkdk',1),其中b是text类型,当我传递sql语句时,会变成 insert into tb (a,b,c) values(1,'dkdkdkdkdk,1)强制将'号删除!
guo 2001-01-02
  • 打赏
  • 举报
回复
正是在VC中出现过后,我才使用DELPHI5+ADO(for ODBC)进行验证,文章不能插入到SQLSERVER7中(2000中同样)TEXT字段中,或者能插入到SQLSERVER7中但如果再读取这条记录,TEXT字段的长度较原文短!
由于这个问题文章较长,不便写在页面上,如果有兴趣,我可以EMAIL给你(没有压缩时48.2K)
yangzi 2001-01-02
  • 打赏
  • 举报
回复
你的文章是否超过8K?
如果超过,insert 有可能不对。
xmlingo 2001-01-02
  • 打赏
  • 举报
回复
ODBC SQL语句长度有限制,具体多长我也不请楚
如果你由ADO 或DAO 请使用该对象的专门方法进行更新


============]我的灵魂在高处[====================== xmlingo
guo 2001-01-02
  • 打赏
  • 举报
回复
版本没有问题,我使用的是sqlserver 2000携带的odbc。
数据库操作使用的方法是insert.
yangzi 2001-01-02
  • 打赏
  • 举报
回复
我想知道你是用putdata操作的吗?还是直接用insert
BIG_panda 2001-01-02
  • 打赏
  • 举报
回复
这个问题以前我也遇见过,是因为odbc驱动程序太旧的原因,你可以升及该驱动到更新
yangzi 2000-12-30
  • 打赏
  • 举报
回复
呵呵,你是怎么用ODBC的
happylaodu 2000-12-30
  • 打赏
  • 举报
回复
请问你用的是什么语言开发的,如果是VC,那不是ODBC的问题,而是程序的问题……我可帮你解决
The_east_key 2000-12-28
  • 打赏
  • 举报
回复
请到http://www.etechbase.net/advsearch.php,将你这个问题输入到检索框,然后选择准确匹配查询,应该可以帮助你解决这个问题的。
my8848 2000-12-26
  • 打赏
  • 举报
回复
独家关注。

34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧