存储过程:
create procedure p1()
begin
select * from UserTable;
end这个存储过程在MySql命令行中调用是没有问题的,但用vc调用的时候出错int ret = mysql_real_query(pMySql, "call p1()");ret返回值为1我有两个问题:
1. 通过mysql_real_query调用的存储过程中不能使用查询语句吗?
2. ret为1代表什么,如何可以查看错误信息多谢各位解惑

解决方案 »

  1.   

    int ret = mysql_real_query(pMySql, "call p1()");
    应该是能的。
    你这个ret得到的可能是影响行数或者是存储过程的执行结果,不是结果集。
      

  2.   


    但是mysql_real_query执行正常的返回结果应该是0,所以这句执行应该是不正常的。
      

  3.   

    实际问题是这样:
        create procedure Pro_GetUserInfo(in szEmpName varchar(1000))
        -> begin
        -> declare strSql varchar(1000);
        -> set strSql = concat('insert into TmpTable_UserInfo(EmpName,PcName,IP) select EmpName,PcName,IP from T_SC_UserManager where EmpName in (', szEmpName, ')');
        -> drop table if exists TmpTable_UserInfo;
        -> create temporary table TmpTable_UserInfo(EmpName varchar(32) not null, PcName varchar(32) not null, IP varchar(32) not null);
        -> set @sql1 = strSql;
        -> prepare stmt_p from @sql1;
        -> execute stmt_p;
        -> end
        上面这个存储过程用vc调用可以确定不会调用成功,因为调用之后,看临时表TmpTable_UserInfo根本没产生。但是只要把
     set @sql1 = strSql;
        -> prepare stmt_p from @sql1;
        -> execute stmt_p;

    去掉,在vc中调用就可以成功,当然,也失去意义了。。
      

  4.   

    可以
    int mysql_real_query(MYSQL *mysql, const char *stmt_str, unsigned long length) 
      

  5.   


    不好意思,
    int ret = mysql_real_query(pMySql, "call p1()"); 
    发帖时的笔误程序里面写的是正确的
      

  6.   

    原因找到了,mysql_real_connect最后一个参数设置为CLIENT_MULTI_STATEMENTS