本来用CString做参数类型,执行SQL语句,没想到CString 不能保存多于250的字符串,我的SQL有300长,不知道改用什么类型来做?AdoCommand.Excute(strText)?

解决方案 »

  1.   

    用char数组,sprintf同样可以格式化
      

  2.   

    不可能吧。你是不是在debug时用watch看的?那里显示不下的!!
    CString的容量很大的,是G级的。你把那个Cstring写到文件看看!!
      

  3.   

    1 CString 应该可以装下你的SQL。在内存调试窗口看看CString中m_pchData里的内容。
    2 大不了用数组。
      

  4.   

    肯定不是CString的大小问题,他的容量够你用了。
      

  5.   

    记得以前有人讨论过CString的最大容量,绝对远大于250。
      

  6.   

    完全可以。如果有问题,你可以输出看看是不是你的SQL语句有问题。
      

  7.   

    CString没这个长度限制是不是数据库不支持这么长?
      

  8.   

    CString具休能放多少字符我倒是不知,但以前试过用一个CString来存入一个几MB的文件,没问题
      

  9.   

    我知道!!
    其实只是调试的时候显示不出来而已,我也遇到过同样的问题,最后发现还是自己的SQL语句写错了
      

  10.   

    可以的,我以前做过一个程序,用CString装一个文件里的东西,我记得文件有好几K呢,都没有问题!楼主检查一下别的地方吧!
      

  11.   

    多谢各位GGMM的积极参与,先谢过了!watch有可能显示不足(或不显示),我见到了,不过调用GetLength(),得到260,应该是真实的长度吧,CString strSQL="Insert T_student (id ,name ,sex ,age ,info ,class ) values('10001001','刘京生','01',20,'info>250','20001001')";int iLength=strSQL.GetLength();
    这个变量长度应该大于300,可是随后调用GetLength()得到260,info后面的部分被截除了,
    我还使用Fromat,_T(),+=等,结果都是这样的,各位可以试一试,看看结果,帮帮忙吧^_^
      

  12.   

    不可能, 用过CStrng接受服务端的数据,1K都有了。TRACE()是有长度限制的,只能是512个。
      

  13.   

    请注意strSQL语句中的'info>250',意思是info字段的内容大于250个字符,所以整个变量的内容就大于250,至于结束符,整个strSQL的内容大家都看到了,有吗?结束符是什么符号啊?另,没用到TRACE(),大家可以把上面的两行代码运行一下,告诉我结果,看看我的机器是不是有问题(赛扬2.4,win2000svr,512M内存,DELL原装)
      

  14.   

    把 info 字段的值也贴上来看看!
      

  15.   

    其实info字段的值是我瞎编的,是一段中文,大家可以随便写值的,比如:新的交换式网络已使网络管理员能有效地将工作组、数据中心及桌面的性能最大限度地提高。但不幸的是,这种新方法使得网络监控和管理与共享式网络相比变得更困难、更复杂。在交换式的环境中-特别是当平均每端口的价格继续下降时出现的交换式桌面环境-对远程监控数据的全面采集更加复杂,这是因为局域网网段的数量大幅度增加,这必然导致网管工作量的提高。随着网段数量的增加及网络中各种系统的多样性,优化性能价格比的最佳途径是在网络的不同地方提供不同层次的RMON,以此将监控和管理工作分布开。
    有230多个字符,大家也可以用英文
      

  16.   

    CString strSQL="一个大于300的字符串";
    int iLength=strSQL.GetLength();
    就两句,大家试一试,贴出你的结果watch里显示的strSQL内容和iLength值。
      

  17.   

    CString aa;
    aa = "新的交换式网络已使网络管理员能有效地将工作组、数据中心及桌面的性能最大限度地提高。但不幸的是,这种新方法使得网络监控和管理与共享式网络相比变得更困难、更复杂。在交换式的环境中-特别是当平均每端口的价格继续下降时出现的交换式桌面环境-对远程监控数据的全面采集更加复杂,这是因为局域网网段的数量大幅度增加,这必然导致网管工作量的提高。随着网段数量的增加及网络中各种系统的多样性,优化性能价格比的最佳途径是在网络的不同地方提供不同层次的RMON,以此将监控和管理工作分布开" ;
    int length = aa.GetLength();length = 462
      

  18.   

    在watch窗口中可以看到CString的地址,然后拷贝到Memery窗口中,可以看到完整的内容。
      

  19.   

    估计是字段的原因,access中用备注存放大数据量
      

  20.   

    可能是你的SQL语句有问题,比如单引号不匹配等等
      

  21.   

    按照你的描述,把你的info及其长度单独打印一下看看吧,不要找sql语句的毛病了。肯定是info的里面有结束符,
      

  22.   

    WATCH 和TRACE里面看到的是有长度限制的.(好象不超过255)
    sql的执行语句,不能超过8K多.超过这个长度,违背了sql的变量定义规则.
    CString应该只和你的内存大小有关吧,我想一般来说是不用考虑的.
    你可以把这个字段写到一个文件里,看看就明白了.
      

  23.   

    有一次,测试注册表的SZ,CString 可以大于2048
      

  24.   

    不是CString 容量不够,而是用它做参数传递不行(偶尔)。我也遇到过这种现象。用char 指针传递,然后组合起来就可以了
      

  25.   

    2G,随便用吧。。你可以MessageBox();出来。
      

  26.   

    我的SQL文都是1K左右的,用CString,完全没任何问题。搂主再检查下自己的程序吧!
      

  27.   

    同意jazy()的看法,你的CString 遇0截止了
      

  28.   

    我以前写过一个sql语句,结果用户的数据库的一个值带引号,整的我搞了好几天才找到.
    我估计是你的sql语句不全面
      

  29.   

    我也遇到过
    我解决了,
    CString str1 ,str2,strsql;
    str1.format("");
    str2.format("");
    strsql = str1+str2;