c++调用mysql存储过程_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++调用mysql存储过程_C++中ADO调用MySQL存储过程失败,诡异的语法异常,求解中,附源码...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python代码模块与模块之间空1行_D
- 下一篇: java 区间树_线段树(区间树)之区间