最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

C语言调用mysql的存储过程_MySQL

来源:动视网 责编:小采 时间:2020-11-09 19:53:24
文档

C语言调用mysql的存储过程_MySQL

C语言调用mysql的存储过程_MySQL:本篇文章讲解C语言调用mysql数据库的存储过程的方法 下面假设有一张sc表,保存学生选课记录,有课程号,学号,平时分,卷面分,总分。 建立数据库表过程: create table class( cno varchar(8) not null, sno varchar(8) not null
推荐度:
导读C语言调用mysql的存储过程_MySQL:本篇文章讲解C语言调用mysql数据库的存储过程的方法 下面假设有一张sc表,保存学生选课记录,有课程号,学号,平时分,卷面分,总分。 建立数据库表过程: create table class( cno varchar(8) not null, sno varchar(8) not null


本篇文章讲解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,学号,课程号;建立过程如下

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( x*pert + 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;
}

文档

C语言调用mysql的存储过程_MySQL

C语言调用mysql的存储过程_MySQL:本篇文章讲解C语言调用mysql数据库的存储过程的方法 下面假设有一张sc表,保存学生选课记录,有课程号,学号,平时分,卷面分,总分。 建立数据库表过程: create table class( cno varchar(8) not null, sno varchar(8) not null
推荐度:
标签: 过程 cc 语言
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top