通过ADO写SQL6.5,为什么写进行的汉字在SQL中是“?”,好像把一个汉字作为一个Byte处理了!

解决方案 »

  1.   

    在VB中,汉字与英文不区分,都是一个BYTE
      

  2.   

    把你的源程序贴上来,看看。有可能是数据处理的问题。
    还有就是ado这个com和vc存在数据的转换问题。
      

  3.   


    field->put_Value(varValue);
    ....
    而varValue是这样定义的:
    VARIANT varValue;
    由一个CString strValue传给varValue的。

    switch (type)//type是该字段的类型
    {
    ...
    case adChar:
    case adVarChar:
    case adVarWChar:
    varValue->vt=VT_BSTR;
    varValue->bstrVal=(_bstr_b)strValue;
    ....
    我跟踪过,在field->put_Value(varValue)时,varValue是我要写入的值,但写入sql65后,一个汉字就变成一个“?",真搞不懂,谢谢高手指导一下!!
      

  4.   

    你的sql是不是支持中文?(这在安装sql是决定)
      

  5.   

    支持的,我在SQL上运行同样的脚本插入,结果很正常。
      

  6.   

    SQL中是varchar,取出来后TYPE=adVarChar.
      

  7.   

    不知何故,你的汉字是变成了一堆问号?还是变成了一个问号?
    不过我有一个办法,就是麻烦点,你在插入前先做一下转换,将每个汉字转化为他
    们十六进制的ASCII码表示形式,然后,取出时再转化回来。这是SQL SERVER处理
    二进制数据时的处理方法。
      

  8.   

    VARIANT varValue;
    CString strValue;
    这两种数据类型存在转换的问题(本人直觉)
    可以尝试换一种数据,或者强制转换一下看看。
      

  9.   

    把varValue->vt=VT_BSTR换成
    varValue->vt=VT_BSTRT;
    试一试,因该是ANSI字符和UNICODE字符作怪。
      

  10.   

    COleVariant varValue((LPCTSTR)strValue, VT_BSTR);//Unicode
    COleVariant varValue((LPCTSTR)strValue, VT_BSTRT);//Ansi上面其中的一种应该能处理乱码的问题。
      

  11.   

    sql 的字符集是936 简体中文吗?