我用vc设置数据源,采用UNICODE工程,SQL Server数据库。其中如下
CString a=_T("DSN=TryDSN\0Server=Whd\0Database=xsxl\0\0");
SQLConfigDataSource(NULL,ODBC_ADD_SYS,_T("SQL Server\0"),a);这样程序运行结果就不正确。而如果第四个参数不用变量a来代替,而直接写字符串,这样结果就正确。因为上面那个串我是动态获得的,所以时刻变化,不能直接写在函数里。所以用变量代替,可是老出错,是宽字节间的转换问题,可是我用了很多来转换,就是不好用。那位大虾有此经历,能给出指点,菜鸟在此谢谢了。

解决方案 »

  1.   

    CString a=_T("DSN=TryDSN\0Server=Whd\0Database=xsxl\0\0");
    should be
    CString a=_T("DSN=TryDSN\0Server=Whd\0Database=xsxl\0");
      

  2.   

    SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Excel Files (*.xls)", 
                       "DSN=New Excel Data Source\0" 
                       "Description=New Excel Data Source\0" 
                       "FileType=Excel\0" 
                       "DataDirectory=C:\\EXCELDIR\0" 
                       "MaxScanRows=20\0");for example
      

  3.   

    to: AkiraChing(水银) 我试过了,问题不在于\0\0,我在函数中直接使用字符串就好使,可是当我用一个变量来代替就不好用。UNICODE工程很麻烦,ANSI就不会有此问题了。能否在给点意见。谢谢了。
      

  4.   

    嗯,可能是CString a=_T("DSN=TryDSN\0Server=Whd\0Database=xsxl\0\0");只复制了第一部分到a中,需要给a长度,例如
    CString a(_T("DSN=TryDSN\0Server=Whd\0Database=xsxl\0"),
        sizeof _T("DSN=TryDSN\0Server=Whd\0Database=xsxl\0") / sizeof(TCHAR) -1);
    即使用
    CString( 
    LPCTSTR lpch, 
    int nLength ); 这个构造函数