C++中ADO调用MySQL存储过程失败,诡异的语法异常,求解中,附源码

C++中ADO调用MySQL存储过程失败,诡异的语法错误,求解中,附源码

不管怎么调整,死活都出现下面的错误

C++ADO代码我实在找不到什么错误了,难道是MySQL有什么问题,或者有其他需要注意的地方(类似存储过程权限之类的,我都看了,我用root连接啊)

navicat 查询编辑器 执行 call PrGs_GameUser_Login(‘sdfdsfdsfd’) 是没有问题的

根据下面错误信息,难道ADO的CommandText 多了中括号“{”“}”,所以出错?

执行存储过程失败!

  CommandText={ call PrGs_GameUser_Login(?) }

  Description=You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘{ call PrGs_GameUser_Login(‘sdfdsfdsfd’) }’ at line 1

  ErrorMessage()=I

  Error()=80040e14

  Source()=Microsoft OLE DB Provider for ODBC Drivers

存储过程 PrGs_GameUser_Login 没啥可说的,就是一个输入参数,内容是空的

C++源代码

_ConnectionPtr m_Connection; // 数据库连接对象

//_RecordsetPtr m_Recordset; // 记录集对象

_CommandPtr m_Command; // 命令对象

if (m_Connection != NULL || m_Command != NULL/* || m_Recordset != NULL*/)

{

return;

}

try

{

CoInitialize(NULL);

if (FAILED(m_Connection.CreateInstance(__uuidof(Connection))))

{

return;

}

/*if (FAILED(m_Recordset.CreateInstance(__uuidof(Recordset))))

{

return;

}*/

if (FAILED(m_Command.CreateInstance(__uuidof(Command))))

{

return;

}

m_Connection->CursorLocation = adUseClient;

// 把结果集和命令对象关联起来

//m_Recordset->PutRefSource(m_Command);

//m_Recordset->CursorLocation = adUseClient;

// 只支持存储过程调用

m_Command->CommandType = adCmdStoredProc;

}

catch (…)

{

return;

}

if (m_Connection->State != adStateClosed)

{

return;

}

if (FAILED(m_Connection->Open(“Driver={MySQL ODBC 3.51 Driver};Server=192.168.1.107;Port=3306;Option=4;Database=yxgamedb;Uid=root;Pwd=123456;”

, L””, L””, adConnectUnspecified)))

{

return ;

}

m_Connection->CommandTimeout = 60;

m_Command->CommandTimeout = 60;

m_Command->ActiveConnection = m_Connection;

std::string userName = “sdfdsfdsfd”;

//int outParam = 4;

m_Command->CommandText = L”PrGs_GameUser_Login”;

_ParameterPtr spParam1 = m_Command->CreateParameter(“UserName”, adVarChar, adParamInput, 33, (_variant_t)(userName.c_str()));

if (FAILED(m_Command->Parameters->Append(spParam1)))

{

return;

}

/*_ParameterPtr spParam2 = m_Command->CreateParameter(“OutParam”, adInteger, adParamOutput, 4, (_variant_t)outParam);

if (FAILED(m_Command->Parameters->Append(spParam2)))

{

return;

}*/

try

{

m_Command->Execute(NULL, NULL, adExecuteNoRecords);

}

catch (_com_error &e)

{

PrintInfoLog(“执行存储失败!\n CommandText=%s\n Description()=%s\n ErrorMessage()=%s\n Error()=%08lx\n Error()=%s”,

(LPSTR)m_Command->CommandText, (LPSTR)e.Description(), (LPSTR)e.ErrorMessage(),

e.Error(), (LPSTR)e.Source());

return;

}



你的MYSQL版本与ODBC的版本是多少? 以前的版本上是有类似这个BUG的。

C++中ADO调用MySQL存储过程失败,诡异的语法异常,求解中,附源码

相关文章:

你感兴趣的文章:

标签云: