我尝试着用ADO连接MySQL数据库,测试发现已经连接成功了,但接下来我在使用_ConnectionPtr 的Execute函数执行插入操作时发现,如果待执行的sql语句中有中文的话,该函数总是抛出异常,如果我修改一下sql语句,把中文换成数字或字母就能顺利执行。我是用VC写的程序,部分代码如下所示。请大家帮忙分析一下问题可能出在哪里,先谢谢了。CString  strSQL;
int nID=0;
CString strName="张三";  //此处用中文会有问题,换成字母或数字就没有问题
strSQL.Format("INSERT INTO MYTABLE(id,name) VALUES(%d,'%s')",nID,strName);
_bstr_t bstrSQL=strSQL.AllocSysString();
m_pConnection->Execute(bstrSQL,...);

解决方案 »

  1.   

    sql 用的是ANSI
    MySQL跨平台,所以用的是Unicode
      

  2.   

    你可以获取错误信息,不就知道原因了
    或者你把这条语句在MySQL带的工具(没用过MySQL,不知道有没有工具)中执行,有错一般会有提示的
      

  3.   

    我的程序就是基于多字节的,没有设置成Unicode,如果修改成Unicode的话,那要改动的地方就太多了。像我上面的那几行代码,该怎么修改才能正常工作呢?
      

  4.   

    我把工程改成是Unicode格式的,代码改成如下:CString  strSQL;
    int nID=0;
    CString strName=_T("张三");  
    strSQL.Format("INSERT INTO MYTABLE(id,name) VALUES(%d,'%s')",nID,strName);
    _bstr_t bstrSQL=strSQL.AllocSysString();
    m_pConnection->Execute(bstrSQL,...);
    运行还是会崩溃,Execute语句会抛出异常。
      

  5.   

    坐等高人解决!!我连接mysql都是用MYSQL C API的
      

  6.   


    CString  strSQL;
    int nID=0;
    CString strName="张三";  //此处用中文会有问题,换成字母或数字就没有问题
    strSQL.Format("INSERT INTO MYTABLE(id,name) VALUES(%d,'%s')",nID,strName);
    try
    {
    _bstr_t bstrSQL=strSQL.AllocSysString();
    m_pConnection->Execute(bstrSQL,...);
    }catch(_com_error e)
    {
    MessageBox(e.Description, e.ErrorMessage);
    }看下提示什么错误.