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