• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

mysql 搞代码 7年前 (2018-06-04) 167次浏览 已收录 0个评论

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的。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C++中ADO调用MySQL存储过程失败,诡异的语法异常,求解中,附源码

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址