码迷,mamicode.com
首页 > 数据库 > 详细

使用otl,报错:mysql Commands out of sync; you can't run this command now

时间:2015-05-30 19:38:24      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:

1、代码如下:

void TestCache(otl_connect& otlConn)
{
    try
    {
        char sql[1024] = {0};
        sprintf(sql,"call test1(1)");
        otl_stream stream(100, sql, otlConn,otl_implicit_select);

        int id;
        while(!stream.eof())
        {
            stream>>id;
            char sql2[1024] = {0};
            sprintf(sql2,"call test2(:Id<int>)");
            otl_stream stream2(100, sql2, otlConn,otl_implicit_select);
            stream2<<id;

            while(!stream2.eof())
            {
                int ff =0;
            }
        }
    }
    catch(otl_exception& ex)
    {
        printf("ExecuteSql Error, ErrorMsg[%s], Sql[%s]",
            ex.msg,
            ex.stm_text);
    }
}

 2、执行otl_stream stream2(100, sql2, otlConn,otl_implicit_select);的时候出错,如下:

Commands out of sync; you can‘t run this command now
3、错误原因:mysql上一次的查询没有将结果集释放掉,又进行下一次的查询。
4、otl:在第一个stream读取期间,第二个stream使用了绑定变量,会导致上面的问题,不知道otl内部是怎么封装的。
5、解决办法:
a、第二个stream不使用绑定变量,如下:

void TestCache(otl_connect& otlConn)
{
    try
    {
        char sql[1024] = {0};
        sprintf(sql,"call test1(1)");
        otl_stream stream(100, sql, otlConn,otl_implicit_select);

        int id;
        while(!stream.eof())
        {
            stream>>id;
            char sql2[1024] = {0};
            sprintf(sql2,"call test2(%d)",id);
            otl_stream stream2(100, sql2, otlConn,otl_implicit_select);

            while(!stream2.eof())
            {
                int ff =0;
            }
        }
    }
    catch(otl_exception& ex)
    {
        printf("ExecuteSql Error, ErrorMsg[%s], Sql[%s]",
            ex.msg,
            ex.stm_text);
    }
}   

b、先把第一个stream读取完,再进行第二个stream,如下:

void TestCache(otl_connect& otlConn)
{
    try
    {
        char sql[1024] = {0};
        sprintf(sql,"call test1(1)");
        otl_stream stream(100, sql, otlConn,otl_implicit_select);

        vector<int> intVec;
        int id;
        while(!stream.eof())
        {
            stream>>id;
            intVec.push_back(id);            
        }

        for(vector<int>::iterator iter = intVec.begin();
            iter != intVec.end(); ++iter)
        {
            char sql2[1024] = {0};
            sprintf(sql2,"call test2(:Id<int>)");
            otl_stream stream2(100, sql2, otlConn,otl_implicit_select);
            stream2<<id;

            while(!stream2.eof())
            {
                int ff =0;
            }
        }
    }
    catch(otl_exception& ex)
    {
        printf("ExecuteSql Error, ErrorMsg[%s], Sql[%s]",
            ex.msg,
            ex.stm_text);
    }
}

 

 

使用otl,报错:mysql Commands out of sync; you can't run this command now

标签:

原文地址:http://www.cnblogs.com/nzbbody/p/4540738.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!