`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);用上面的语句不正确,高手请帮忙??????????
int iPlayerID = 1;
char szGetRank[256] = {0};
sprintf_s(szGetRank,sizeof(szGetRank),"call getPlayerRank_Test(%d,%d);",iPlayerID,iRank);
pDB->Execute(szGetRank);用上面的语句不正确,高手请帮忙??????????
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);
、查询结果集并保存
mysql_query(&mysql, "SELECT @ret,@ out_name,@ out_age ");
是不是不能直接用参数,返回存储过程中返回的值,一定要再select 以下???????
然后再 select @x 把值赋给iRank