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

时间:2015-07-22 01:14:18

标签: 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-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 ;

我真的不知道这件事是什么。请帮我。

1 个答案:

答案 0 :(得分:1)

解决了!原因是执行功能。当我的团队使用SQL Server时,EXECUTION函数的字符串组合是EXEC而没有括号。 (众所周知,SQL Server执行程序由' EXEC sp_name arg1 arg2 ...')

但MySQL(以及MariaDB)的过程执行语法是' CALL sp_name(arg1,arg2 ...)。我们的程序员改变了EXECTION函数的字符串组合。和?它完美无缺!