`getPlayerRank`(IN inplayerid INTEGER(11), OUT rank INTEGER(11))存储过程名如上,我在vc中如何调用getPlayerRank获取到存储过程中的返回值.....int iRank = 0;
int iPlayerID = 1;
char szGetRank[256] = {0};
sprintf_s(szGetRank,sizeof(szGetRank),"call getPlayerRank_Test(%d,%d);",iPlayerID,iRank);
pDB->Execute(szGetRank);用上面的语句不正确,高手请帮忙??????????

解决方案 »

  1.   

    printf ( szGetRank) ;调试中断看一下内容是什么。
      

  2.   

    简单示例,你参考一下
    1、首先创建一张表 
    用于存放用户信息 
    Create table student( 
        id int auto_increment, 
        name varchar(20), 
        age tinyint, 
        re varchar(50), 
        primary key(id) 
    ); 
    4、创建存储过程 
    如下: 
    delimiter // 
    create procedure querystudent( 
          in in_id int ,  #0-字符id 1-数字id    
          # 
          out out_ret int,                #返回结果 
          out out_name varchar(20),        #名字 
          out out_age    int                #年龄    

    label_a:begin 
          declare v_name varchar(20) ; 
          declare v_age tinyint ; 
          #参数判断 
          if (in_id <=0) then 
                  set out_ret=-1; #id error 
                  leave label_a; 
          end if; 
                
          SELECT name,age into v_name,v_age from student where id=in_id limit 1; 
          
          if v_age is NULL then 
                  set out_ret=-2; #don't found 
                  leave label_a; 
          end if;    
                
          set out_ret=0; 
          set out_name=v_name; 
          set out_age=v_age; 
    end; 
    // 
    delimiter ; 
    5、c语言调用存储过程 
    调用方法或步骤: 
    5.1、初始化Mysql句柄 
    if(!mysql_init(&mysql)) 
          { 
                  printf("mysql_init failed!\n"); 
                  return 0; 
          } 
    5.2、连接到mysql 
    //login or connect 
          if(!mysql_real_connect(&mysql,"localhost","root","","billingdb",0,NULL,CLIENT_MULTI_STATEMENTS)) 
          { 
                  printf("mysql_real_connect() failed!\n"); 
                  mysql_close(&mysql); 
                  return 0; 
          } 
    5.3、调用存储过程 
        //call 
          strcpy(query,"call querystudent (1,@ret,@ out_name,@ out_age)"); 
          printf("query sql=[%s]\n",query); 
        ret= mysql_real_query(&mysql,query,(unsigned int)strlen(query)); 
    5.4、查询结果集并保存 
    mysql_query(&mysql, "SELECT @ret,@ out_name,@ out_age "); 
          //get result 
          if (ret) 
        { 
                  printf("Error exec query: %s\n",mysql_error(&mysql)); 
        } 
        else 
          { 
                  printf("[%s] exec...\n", query); 
        } 
          results = mysql_store_result(&mysql); 
    5.5、获取查询结果 
    while((record = mysql_fetch_row(results))) { 
                  printf("[%s]-[%s]-[%s]\n", record[0], record[1],record[2]); 
          } 
    一般存储过程只会有一行的返回结果,^_^. 
    5.6、释放资源与mysql连接句柄 
    mysql_free_result(results); 
    mysql_close(&mysql);
      

  3.   

    wwwwb:
     、查询结果集并保存 
    mysql_query(&mysql, "SELECT @ret,@ out_name,@ out_age ");
     是不是不能直接用参数,返回存储过程中返回的值,一定要再select 以下???????
      

  4.   

    你只能 pDB->Execute("call getPlayerRank_Test(1,@x)");
    然后再 select @x 把值赋给iRank