MariaDB,在C++程序中执行存储过程时出现语法错误
问题描述:
首先,感谢您阅读这个问题,并为我可怜的英语道歉。MariaDB,在C++程序中执行存储过程时出现语法错误
我现在正在将我的数据库从SQL-Server转换为MariaDB。我安装了MySQL ODBC驱动程序并添加了“系统DSN”。 (C:\ Windows \ SysWOW64 \ odbcad32.exe)
执行存储过程时发生此问题。
当我在SQLyog创建一个过程时,没有错误,执行也很好。但是当我在我的C++应用程序中执行存储过程时会出现语法错误。
数据库[MySQL的] [ODBC 5.3(w)的驱动程序]的[mysqld-5.5.5-10.0.20-MariaDB的]您 有一个错误的SQL语法;检查与您的MariaDB服务器版本 相对应的手册,以获得在 'get_bookProperty?'附近使用的正确语法。在1号线
我的C++代码是...
bool LoadbookProperty::OnExecute(db::IDbProcesser* dbProcesser)
{
const char* bookName = m_bookName.c_str();
dbProcesser->BindParams(bookName);
if (!dbProcesser->Execute("get_bookProperty"))
return false;
char type[PROPERTY_NAME_LEN];
char value[PROPERTY_VALUE_LEN];
dbProcesser->BindCols(type, value);
dbProcesser->FetchWith([this, &type, &value]()
{
m_properties.push_back(std::make_pair(type, value));
});
return true;
}
我的程序是...
USE bookInfoDB;
-- GetbookProperty
DELIMITER ;;
CREATE PROCEDURE get_bookProperty (
IN pi_bookName VARCHAR(32)
)
this_proc:BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
END;
SELECT bookName, bookPrice FROM bookProperty WHERE bookName = pi_bookName;
END ;;
DELIMITER ;
我真的不知道发生什么事了。请帮帮我。
答
解决了!原因是执行功能。当我的团队使用SQL Server时,EXECUTION函数的字符串组合是EXEC,没有括号。 (大家都知道,SQL Server执行程序'EXEC sp_name arg1 arg2 ...')
但是MySQL(以及MariaDB)的程序执行语法是'CALL sp_name(arg1,arg2 ...) 。我们的程序员已经改变了EXECTION函数的字符串组合。和?它完美的工作!
你尝试过'调用get_bookProperty'吗? –
我试过在SQLyog和mysql控制台中调用get_bookProperty。两者都运行良好。你的意思是......改变我的cpp代码?执行调用? – passion053