C语言调用mysql的存储过程

C语言调用mysql的存储过程

下面假设有一张sc表,保存学生选课记录,有课程号,学号,平时分,卷面分,总分。

建立数据库表过程:

create table class(

cno varchar(8) not null,

sno varchar(8) not null,

ordinary_score int,

last_score int,

all_score int

);

存储过程

由括号包围的参数列必须总是存在。如果没有参数,也该使用一个空参数列()。每个参数 默认都是一个IN参数。要指定为其它参数,可在参数名之前使用关键词IN(默认,可缺省) OUT或INOUT。

IN参数是只传入

OUT参数是只传出

INOUT参数是既传入又传入,即双向传递

指定参数为IN, OUT, 或INOUT 只对PROCEDURE是合法的。(FUNCTION参数总是被认为是IN参数)

建立存储过程,传入平时分x,卷面分y,平时分所占的比率pert,学号,课程号;建立过程如下

代码语言:javascript代码运行次数:0运行复制delimiter //

CREATE PROCEDURE cal_grade(x INT,y INT,out t int,pert float,s VARCHAR(8),c VARCHAR(8))

LABEL_PROC:

BEGIN

IF ( x < 0 || x > 100 ) THEN

SET t = -1;

LEAVE LABEL_PROC;

END IF;

IF ( y < 0 || y > 100 ) THEN

SET t = -2;

LEAVE LABEL_PROC;

END IF;

SET t = ROUND( xpert + y(1-pert) );

UPDATE sc SET ordinary_score=x,last_score=y WHERE sno=s AND cno=c AND tno=tn;

END LABEL_PROC //

delimiter ;

C语言调用

#include

include "mysql.h"

int main()

{

MYSQL my_connection;

MYSQL_RES res_ptr;

MYSQL_ROW sqlrow;

char buf[100];

my_connection = mysql_init (NULL);

//下面连接的最后一个参数必须为CLIENT_MULTI_STATEMENTS,不然就会报错select error: PROCEDURE *** can’t return a result set in the given context

my_connection = mysql_real_connect (my_connection, "localhost", "root", "root", "test", 0, NULL, CLIENT_MULTI_STATEMENTS);

sprintf (buf, "call cal_grade(%d,%d,@t,%f,%s,%s)", 10, 10, 0.3, 123, 456);

if ( mysql_query (my_connection, buf) )

sprintf (stderr, mysql_error (my_connection));

else

{

//获得返回参数@t,@t是传出参数

mysql_query (my_connection, "select @t");

res_ptr = mysql_store_result (my_connection);

if (res_ptr)

{

sqlrow = mysql_fetch_row (res_ptr);

if (!strcmp (sqlrow[0], "-1"))

printf ("平时分不在范围之内\n");

else if (!strcmp (sqlrow[0], "-2"))

printf ("卷面分不在范围之内\n");

else

printf ("总分为:%s\n", sqlrow[0]);

}

mysql_free_result (res_ptr);

}

mysql_close (my_connection);

return 0;

}

相关推荐

验证码发送失败的原因
365bet开户官网

验证码发送失败的原因

📅 09-04 👁️ 7793
南雪软件下载 v1.0.0
365禁用取消提款什么意思

南雪软件下载 v1.0.0

📅 06-28 👁️ 2861
chicbelle佳茵要多少钱一盒?
365禁用取消提款什么意思

chicbelle佳茵要多少钱一盒?

📅 10-07 👁️ 3009
中国女篮获世界杯亚军!女子三大球,为何打动我们?
365bet体育备用网站

中国女篮获世界杯亚军!女子三大球,为何打动我们?

📅 07-09 👁️ 2233
5、天涯明月刀退出帮派多久才能再加
365bet体育备用网站

5、天涯明月刀退出帮派多久才能再加

📅 09-25 👁️ 3181
《极品飞车20:复仇》沦陷 D加密坚挺4个月终被破解
365bet体育备用网站

《极品飞车20:复仇》沦陷 D加密坚挺4个月终被破解

📅 09-03 👁️ 3946
女足世界杯将从32支球队扩军至48支
365bet体育备用网站

女足世界杯将从32支球队扩军至48支

📅 09-21 👁️ 8646
火影忍者知識綜合測驗
365禁用取消提款什么意思

火影忍者知識綜合測驗

📅 08-31 👁️ 133
SAP软件价格揭秘:多维度解析与选择指南
365bet体育备用网站

SAP软件价格揭秘:多维度解析与选择指南

📅 08-04 👁️ 4703