首先,感谢您阅读此问题并为我糟糕的英语道歉。
我现在将我的数据库从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 ;
我真的不知道这件事是什么。请帮我。
答案 0 :(得分:1)
解决了!原因是执行功能。当我的团队使用SQL Server时,EXECUTION函数的字符串组合是EXEC而没有括号。 (众所周知,SQL Server执行程序由' EXEC sp_name arg1 arg2 ...')
但MySQL(以及MariaDB)的过程执行语法是' CALL sp_name(arg1,arg2 ...)。我们的程序员改变了EXECTION函数的字符串组合。和?它完美无缺!