C++ MariaDB,在c+中执行存储过程时出现语法错误+;程序

C++ MariaDB,在c+中执行存储过程时出现语法错误+;程序,c++,mysql,odbc,C++,Mysql,Odbc,首先,感谢您阅读此问题,并为我的英语水平低下表示歉意 我现在正在将我的数据库从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-Ma

首先,感谢您阅读此问题,并为我的英语水平低下表示歉意

我现在正在将我的数据库从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时,执行函数的字符串组合是EXEC,没有括号。 (大家都知道,SQL Server通过“EXEC sp_name arg1 arg2…”执行过程)


但是MySQL(以及MariaDB)的过程执行语法是“调用sp_名称(arg1,arg2…)。我们的程序员已经改变了执行函数的字符串组合。然后呢?它工作得很好

你试过调用get\u bookProperty吗?我试过在SQLyog和mysql控制台中调用get\u bookProperty。两个都很好。你是说…更改我的cpp代码?执行呼叫?