c语言连接数据库

c语言连接数据库
c语言连接数据库

使用C语言操作MySQL数据库

1.连接数据库。

从C语言连接MySQL数据库包含两个步骤:

a)初始化连接句柄结构;

b)实际创建连接。

首先使用mysql_init初始化连接句柄:

MYSQL * mysql_init (MYSQL *);

通常传递一个空指针给mysql_init这个函数,它会返回一个指向新分配的连接句柄结构的指针。

如果传递一个已有的结构,他将被重新初始化。如果出错,返回NULL。

初始化成功后,则使用mysql_real_connect来创建一个实际的连接:

MYSQL * mysql_real_connect(MYSQL * connection,

const char * server_host,

const char * sql_user_name,

const char * sql_password,

const char *db_name,

unsigned int port_number,

const char * unix_socket_name,

unsigned int flags

);

connection必须是已经初始化的连接句柄结构,server_host可以是主机名,也可以是IP地址,如果仅仅连接到本机,

可以使用localhost来优化连接类型。port_number和unix_socket_name应该分别为0和NULL,除非改变了MYSQL安装的默认设置。

如果无法连接,返回NULL。完成连接后,在程序正常退出前,应该使用mysql_close关闭这个连接句柄。

void mysql_close(MYSQL * connection);

现在我们试图调用以上函数来建立一个对以上已经建好的数据库的访问,程序为connect1.c。内容如下:

#include

#include

#include "mysql.h"

int main (int argc, char *argv[])

{

MYSQL *conn_ptr;

conn_ptr=mysql_init(NULL); //连接初始化

if(!conn_ptr){

fprintf(stderr, "mysql_init failed\n");

return EXIT_FAILURE;

}

conn_ptr = mysql_real_connect(conn_ptr, "localhost", "moldao","newpassword","moldao_test", 0, NULL, 0);

//建立实际连接

//参数分别为:初始化的连接句柄指针,主机名(或者IP),用户名,密码,数据库名,0,NULL,0)

后面三个参数在默认安装mysql>的情况下不用改

if(conn_ptr){

printf("Connection success\n");

}

else {

printf("Connection failed\n");

}

mysql_close(conn_ptr); //关闭连接

return EXIT_SUCCESS;

}

然后编译:

#gcc -I/usr/include/mysql connect1.c -lmysqlclient -o connect1

connect1.c:4:19: 错误:mysql.h:没有那个文件或目录

提示是没有找到mysql.h,产生这个错误的原因是没有mysql.h文

件,它在mysql-devel包中,需要安装这个包:

sudo yum install mysql-devel -y

然后找一下:

#locate mysql.h

/usr/include/mysql/mysql.h

这样就可以找到这个头文件了(-I的含义是在指定位置搜索头文件,参见man gcc)。再次尝试编译:

#gcc -I/usr/include/mysql connect1.c -lmysqlclient -o connect1 /usr/bin/ld: cannot find -lmysqlclient

collect2: ld 返回1

链接库有问题,找不到mysqlclient链接库,man gcc发现可以在后面用-L指定搜索位置,于是我们先找到mysqlclient库的位置:locate *mysqlclient*

/usr/lib/mysql/libmysqlclient.a

/usr/lib/mysql/libmysqlclient.so

/usr/lib/mysql/libmysqlclient.so.15

/usr/lib/mysql/libmysqlclient.so.15.0.0

/usr/lib/mysql/libmysqlclient_r.a

/usr/lib/mysql/libmysqlclient_r.so

/usr/lib/mysql/libmysqlclient_r.so.15

/usr/lib/mysql/libmysqlclient_r.so.15.0.0

这样找到位置就可以编译了:

gcc -I/usr/include/mysql connect1.c -lmysqlclient -L/usr/lib/mysql -o connect1

编译成功,于是就可以运行了,在此之前,确保mysqld已经在运行了:

sudo /etc/rc.d/init.d/mysqld restart

然后执行生成的可执行文件:

./connect1

Connection success

打印出了我们设计好了的连接成功的打印信息。这样就通过C语言进入了MySQL数据库了。

##########################################

#在以上这一段编译这个connect1.c的文件过程了,出过两次错误,分别记录如上,看起来#

#解决的办法很简单,但是自己当时确实是很迷茫,不知什么原因,网上搜索的结果大都不得#

#要领,最终还是靠自己静下心来看gcc的手册,man gcc才解决。#

#P.S. man gcc真长。要冷静!#

###########################

###############

2. 操作数据库

进入数据库中之后,就可以开始对数据库进行读写操作了。

数据库的主要操作包括select, insert, update, delete四种。

a)sql语句的嵌入:

执行SQL语句的主要API函数是:

int mysql_query(MYSQL *connection, const char * query)

接受已经建立的连接结构指针和文本字符串形式的有效SQL语句(句末不用分号)。成功返回0。

还有一个比较重要的函数,mysql_affected_rows(),他返回无符号类型,当使用printf时,推荐使用%lu格式

将其转换为无符号长整型。此函数返回受之前执行的update,delete,insert等查询影响的行数。

my_ulonglong mysql_affected_rows(MYSQL *connection);

MySQL返回被一个更新操作修改的行数,但其他许多数据库将仅仅因为记录匹配where字句而把它视为已经更新过。

通常对于mysql_函数,返回值0表示没有行受到影响,正数则是实际的结果,一般表示受语句影响的行数。

b)select语句的使用:

select语句是SQL语句中使用最频繁的操作。

一个完整的提取数据过程应该包含以下四个步骤:执行查询,提取数据,处理数据,清理。

使用mysql_query来发送SQL语句,使用mysql_store_result或者mysql_use_result来提取数据。

然后使用mysql_fetch_row调用来处理数据,最后,使用mysql_free_result来释放查询占用的内存资源。

mysql_use_result和mysql_store_result都是返回一个指向结果集结构(result set structure)的指针,如果失败则返回NULL。

区别在于store将查询到的数据库中的结果直接放在这个结果集中,而use则不直接将最终数据库的数据结果放在这个结果集中。store其实就是把数据直接读到本地内存中,因此它比较适合数据量较小的查询。use则类似于一种流的操作,并不是一次就返回所有的结果。

因此,对于这个结果集,必须反复调用mysql_fetch_row直到提取所有的数据。

1)一次获取所有的数据:

MYSQL_RES *mysql_store_result(MYSQL *connection);

在成功调用mysql_query之后使用此函数,将立即保存在客户端中返回的所有数据,并将指向此结果集的指针返回。如果失败则返回NULL。

成功之后,可以用mysql_num_rows来得到返回记录的数目,一般应该是个正数,若没有返回行匹配,则返回0.

my_ulonglong mysql_num_rows(MYSQL_RES *result);

现在得到来数据,可使用mysql_fetch_row来处理它,也可以使用mysql_data_seek,mysql_row_seek和mysql_row_tell在数据集中来回移动。

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

此函数从上面得到的结果集中提取一行,并把它放在一个行结构中。当数据用完或者出错时返回NULL。

void mysql_data_seek(MYSQL_RES *result, my_ulonglong offset);

此函数允许结构集当前指针的跳转,设置会被下一个mysql_fetch_row操作返回的行。offset是行号,在0到总行数减1的范围内。传递0,则返回初始位置。

MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *result);

此函数返回结果集的当前位置。不能把它用于mysql_data_seek。

完成来对数据的所有操作之后,必须调用mysql_free_result来让MYSQL数据库完成善后处理。

void mysql_free_result(MYSQL_RES *result);

--------------------------------------使用范例---------------------------------------------------------

MYSQL my_connection;

MYSQL_RES *res_ptr;

MYSQL_ROW sqlrow;

mysql_init(&my_connection);

if(mysql_real_connect(&my_connection, "localhost", "moldao","password","moldao_test", 0, NULL, 0)){

printf("Connection success\n");

res = mysql_query(&my_connection, "select * from children where age < 10");

if(res){

printf("select error: %s\n", mysql_error(&my_connection));

}else {

res_ptr = mysql_store_result(&my_connection);

if(res_ptr){

printf("Retrieved %lu rows\n", (unsigned long)mysql_num_rows (res_ptr));

while (sqlrow = mysql_fetch_row(res_ptr)){

unsigned int field_count;

field_count =0;

while(field_count < mysql_field_count(&my_connection)){

printf("%s ", sqlrow[field_count]);field_count++;

}

}

if(mysql_errno(&my_connection)){

printf("Retrive

error : %s\n", mysql_error(&my_connection));

}

}

mysql_free_result(res_ptr);

}

mysql_close(&my_connection);

---------------------------------------------------------------------------------------------------

2)一次提取一行数据

建议使用这种提取数据的方式。它能取得更好的网络负载平衡,以及减少大数据集可能造成的存储过载。但是它也增加来时延,并且在特殊的情况下,比如网络链接在操作中途失败时,可能会得到不完整的数据甚至造成混乱。

此时依靠mysql_use_result:

MYSQL_RES *mysql_use_result(MYSQL * connection);

与store一样,出错返回NULL,成功则返回指向结果集对象的指针。

--------------------------------------使用范例---------------------------------------------------------

//这里只写取数据的部分

res_ptr = mysql_store_result(&my_connection);

if(res_ptr){

while (sqlrow = mysql_fetch_row(res_ptr)){

//display_row_or_dealwith_row_here;

}

}

---------------------------------------------------------------------------------------------------

c)update,insert,和delete语句的使用

update, insert和delete这三个操作是不用返回任何数据的语句,他们都是使用mysql_query来执行语句。

--------------------------------------使用范例---------------------------------------------------------

int res = mysql_query(&my_connection, "SQL语句");

if(!res){

printf("operation success\naffected %lu rows\n", (unsigned long)mysql_affected_row (&my_connection));

}

else{

fprintf(stderr, "failed error: %d: %s", mysql_errno(&my_connection), mysql_error(&my_connection));

}

---------------------------------------------------------------------------------------------------

注意的是mysql_affected_row返回的是真正受到影响或者说是被改变的行数,而不仅仅是匹配where字句的行数。

3 一个完整的显示数据库中元数据和数据的例子:

#include

#include

#include "mysql.h"

MYSQL my_connection;

MYSQL_RES *res_ptr;

MYSQL_ROW sqlrow;

void display_header();

void display_row();

int main (int argc, char *argv[])

{

int first_row =1;

int res;

mysql_init(&my_connection); //连接初始化/* if(!conn_ptr){

fprintf(stderr, "mysql_init failed\n");

return EXIT_FAILURE;

}

*/

if(mysql_real_connect(&my_connection, "localhost", "moldao","savage","moldao_test", 0, NULL, 0)){

printf("Connection success\n");

res = mysql_query(&my_connection, "select * from children where age > 4");

if(res){

fprintf(stderr, "Select error : %s\n", mysql_error(&my_connection));

}

else{

res_ptr = mysql_use_result(&my_connection);

if(res_ptr){

display_header();

while((sqlrow = mysql_fetch_row(res_ptr))){

if(first_row){

display_header();

first_row = 0;

}

display_row();

}

if(mysql_errno(&my_connection)){

fprintf(stderr, "Retrive error: %s\n", mysql_error(&my_connection));

}

}

mysql_free_result(res_ptr);

}

mysql_close(&my_connection);

}

else {

fprintf(stderr,"Connection failed\n");

if(mysql_errno(&my_connection)){

fprintf(stderr, "Connection error %d: %s\n", mysql_errno(&my_connection), mysql_error (&my_connection));

}

}

return EXIT_SUCCESS;

}

void display_header(){

MYSQL_FIELD *field_ptr;

printf("Column details: \n");

while((field_ptr = mysql_fetch_field(res_ptr))!= NULL){

printf("\t Name: %s\n", field_ptr->name);

printf("\t Type: ");

if(IS_NUM(field_ptr->type)){

printf("Numeric field\n");

}else{

switch(field_ptr->type){

case FIELD_TYPE_VAR_STRING:

printf("VARCHAR\n");break;

case FIELD_TYPE_LONG:

printf("LONG\n");break;

default:

printf("Type is %d, check in

mysql_com.h\n", field_ptr->type);

}

}

printf("\t Max width %ld\n", field_ptr ->length);

if(field_ptr->flags & AUTO_INCREMENT_FLAG)

printf("\t Auto increment\n");

printf("\n");

}

}

void display_row(){

unsigned int field_count;

field_count = 0;

while(field_count < mysql_field_count(&my_connection)){

if(sqlrow[field_count])

printf("%s ", sqlrow[field_count]);

else printf("NULL");

field_count++;

}

printf("\n");

}

C语言对mysql数据库的操作

1.头文件:

#include

#include

#include //这个是必需要包含的,下面对mysql的所有操作函数,都出自这里

2.定义一个MYSQL变量:

MYSQL mysql;

这里MYSQL是一个用于连接MySql数据库的变量。

在后面对mysql数据库的操作中,我们就用这个MYSQL变量作为句柄的。

3.定义数据库参数:

char host*32+=”localhost”;

char user*32+=”username”;

char passwd*32+=”pwd”;

char dbname*32+=”testdb”;

4.数据库操作

1).初始化数据库:

mysql_init(&mysql);

2).连接数据库:

mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0);

我们在操作时,可以对以上的函数进行if测试,如果初始化或者连接出错,作出相应提示,以便调试。

5.对数据库的操作:

Mysql_query(&mysql, “select * from testdb where condition”);

我们在实际操作中,为了更方便的使用程序中的某些变量,我们将会用到一个函数:

int sprintf(char *str, const char *format, …);

这个函数用来格式化我们的字符串,然后将变量按照给你的格式,赋给第一个参数。

我们使用这个方法方法可以很方便的使用我们的变量来对数据库进行操作。例如我们将要进行数据库的查询操作,我们就可以这样使用:

sprintf(sql,”select * from testdb where username = ‘%s’”,

u_name);

然后使用mysql_query(&mysql, sql)进行查询。

其实大家已经注意到了,在sprintf函数中第二个参数是我们非常熟悉的sql语句,只不过在条件的右端使用了类似输出函数的格式符,因为我们使用了变量。当然,在没有变量的时候,我们可以省去第三个参数,但是这样,我们使用sprintf的作用也就随之消失了。

大家对sql语句的操作一定比我更加熟悉,因此,关于删除和修改的例子我们就不过列举了。

6.关闭数据库连接:

Mysql_close(&mysql);

也许大伙都使用过php对mysql进行操作。也许也已经发现,在c语言中,对mysql数据库的操作和php有很大的相似之处。

下面我赋上一段小小的代码,来结束这篇文档!:)希望大家给予指点。#include

#include

#include

#include

#include

MYSQL mysql;

main(){

c语言连接数据库mysql

下面是C语言连接mysql数据库简单例子: 编译方式: gcc -I /usr/local/mysql/include/ -L /usr/local/mysql/lib/ -l mysqlclient select.c -o select 源码: #include #include #include #include "/usr/local/mysql/include/mysql.h" int main() { MYSQL *conn; MYSQL_RES *res; MYSQL_ROW row; char *server = "192.168.1.99"; char *user = "test"; char *password = "test_passwd"; char *database = "count"; double tvalue1 = 0.93; char st[123]; time_t s; s = time((time_t*)NULL ); sprintf(st, "%d", s); conn = mysql_init(NULL); if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) { fprintf(stderr, "%s\n", mysql_error(conn)); exit(1); } char sql[1024]="SELECT * FROM money_change WHERE c_datetime <= "; strcat(sql,st); strcat(sql,"-3000 AND c_datetime > "); strcat(sql,st); strcat(sql,"-5000 AND c_type = 0 UNION ALL SELECT * FROM money_change WHERE

C编写的OCI连接Oracle数据库

linux下用C编写的OCI连接Oracle数据库程序代码 2009-11-28 15:57206人阅读评论(0)收藏举报在Oracle 建立数据库 create table employees(employee_id number(3), name varchar2(20), sex varchar2(5), birthday date); alter session set nls_date_format = 'yyyy-mm-dd'; insert into employees values('101', '耳温枪', 'na', '1999-05-03'); insert into employees values('102', 'xiaoli ', 'na', '1999-02-03'); insert into employees values('103', 'xiaozhang ', '男', '1999-02-03'); insert into employees values('104', '五千万', '男', '1999-02-03'); insert into employees values('105', '问问', '女', '1999-02-03'); insert into employees values('106', '阿散酸', '女', '1999-02-03'); insert into employees values('107', '阿斯顿', '男', '1999-02-03'); insert into employees values('108', '撒旦', 'na', '2001-5-05'); insert into employees values ('001','张三','三','2001-07-05'); insert into employees values('111','张三','一','2003-02-08'); OCI代码: /*gcc -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -I${ORACLE_HOME}/rdbms/public -I${ORACLE_HOME}/rdbms/demo -L${ORACLE_HOME}/lib -lclntsh -o oracle_test oracle_test.c */ #include #include #include #include static OCIEnv *p_env; static OCIError *p_err; static OCISvcCtx *p_svc; static OCIStmt *p_sql; static OCIDefine *p_dfn = (OCIDefine *) 0; static OCIBind *p_bnd = (OCIBind *) 0; int main() { int p_bvi; char *p_sli; char *p_sli1; int rc; char errbuf[100]; int errcode; char mysql[20]; p_sli=(char *)malloc(20);

C语言连接SQL数据库例子

SELECT FIRSTNME INTO :firstname (4) FROM employee WHERE LASTNAME = 'JOHNSON';(4) printf( "First name = %s\n", firstname ); EXEC SQL CONNECT RESET; (5) return 0; } 上面是一个简单的静态嵌入SQL语句的应用程序。它包括了嵌入SQL的主要部分: (1)中的include SQLCA语句定义并描述了SQLCA的结构。SQLCA用于应用程序和数据库之间的通讯,其中的SQLCODE返回SQL语句执行后的结果状态。 (2)在BEGIN DECLARE SECTION和END DECLARE SECTION之间定义了宿主变量。宿主变量可被SQL语句引用,也可以被C语言语句引用。它用于将程序中的数据通过SQL语句传给数据库管理器,或从数据库管理器接收查询的结果。在SQL语句中,主变量前均有“:”标志以示区别。 (3)在每次访问数据库之前必须做CONNECT操作,以连接到某一个数据库上。这时,应该保证数据库实例已经启动。 (4)是一条选择语句。它将表employee中的LASTNAME为“JOHNSON”的行数据的FIRSTNAME查出,并将它放在 firstname变量中。该语句返回一个结果。可以通过游标返回多个结果。当然,也可以包含update、insert和delete语句。 (5)最后断开数据库的连接。 从上例看出,每条嵌入式SQL语句都用EXEC SQL开始,表明它是一条SQL语句。这也是告诉预编译器在EXEC SQL和“;”之间是嵌入SQL语句。如果一条嵌入式SQL语句占用多行,在C程序中可以用续行符“\”。 c语言用vc连接sql server 2000 2009/11/02 09:34 [sql server]

C语言连接SQL数据库

连接到SAMPLE数据库,查询LASTNAME为JOHNSON得FIRSTNAME信息。 #include <stdio、h> #include <stdlib、h> #include <string、h>? #include "util、h" #include <sqlca、h> ?EXECSQL INCLUD E SQLCA; (1) main() ?{ ? EXEC SQL BEGIN DECLAR E SECTION; (2) char firstname[13]; ? char useri d[9];? char passwd[19]; EXEC SQL END DECLARE SECTION; ? EXE C SQLCONNECT TO sample; (3) EXEC SQL SELECT FIRSTNME INTO :firstname (4) FROM employee ?WHERE LASTNAME = 'JOHNSON';(4) printf( "First name = %s\n", firstnam e ); EXEC SQLCONNECT RESET; (5)? retur n0; }?上面就是一个简单得静态嵌入SQL语句得应用程序。它包括了嵌入SQL得主要部分: (1)中得include SQLCA语句定义并描述了SQLCA得结构。SQLCA 用于应用程序与数据库之间得通讯,其中得SQLCODE返回SQL语句执行后得结果状态。? (2)在BEGINDECLARE SECTION与EN D DECLARE SECTION之间定义了宿主变量。宿主变量可被SQL语句引用,也可以被C语言语句引用。它用于将程序中得数据通过SQL语句传给数据库管理器,或从数据库管理器接收查询得结果。在SQL语句中,主变量前均有“:”标志以示区别。 (3)在每次访问数据库之前必须做CONNECT操作,以连接到某一个数据库上。这时,应该保证数据库实例已经启动。 (4)就是一条选择语句。它将表employee中得LASTNAME为“JOHNSON”得行数据得FIRSTNAME查出,并将它放在 firstname变量中。该语句返回一个结果。可以通过游标返回多个结果。当然,也可以包含update、insert与delete语句。? (5)最后断开数据库得连接。 从上例瞧出,每条嵌入式SQL语句都用EXEC SQL开始,表明它就是一条SQL语句。这也就是告诉预编译器在EXEC SQL与“;”之间就是嵌入SQL 语句。如果一条嵌入式SQL语句占用多行,在C程序中可以用续行符“\”。 C语言与SQL SERVER数据库

数据库课实验 使用C语言操作SQL SERVER 数据库

实验4使用C语言操作SQL Server数据库 1.实验目的与要求: 1.1配置SQL Server ODBC数据源 1.2C语言与SQL Server2005数据库连接 1.3使用C语言操作SQL Server数据库 2.实验环境与实验器材: 计算机,网络环境,投影设备。 实验相关软件:Window xp、PowerDesigner、SQL Server2008。 3.实验内容与步骤 3.1配置SQL Server ODBC数据源 3.2创建students数据库,并在其中创建表student、course、sc,要求如下: student sno sname ssex sage sdept 0611101李勇男21计算机系0611102刘晨男20计算机系0611103王敏女20计算机系0611104张小红女19计算机系0621101张立男20信息管理系0621102吴宾女19信息管理系0621103张海男20信息管理系0631101钱小平女21通信工程系0631102王大力男20通信工程系0631103张姗姗女19通信工程系

Course sc 3.3 编写C 程序,在C 程序中完成对SQL Server 数据库的操作,要求如下: 1).查询计算机系的男生姓名和年龄 2).查询每个学生的选课门数和平均成绩,并按照平均成绩的降序显示结果。3).查询成绩在80分以上的学生姓名、课程名和成绩,并按成绩的降序排列;4).查询哪些课程没有人选,要求列出课程号和课程名; 5). 查询有考试成绩的所有学生的姓名、课程名和成绩,要求将查询结果保存到一张新 cno cname credit semster c001高等数学41c002大学英语31c003大学英语32c004计算机文化学22c005VB 23c006数据库基础45c007数据结构44c008 计算机网络 4 4 sno cno grade 0611101c001960611101c002800611101c003840611101c005620611102c001920611102c002900611102c004840621102c001760621102c004850621102c005730621102c007NULL 0621103c001500621103c004800631101c001500631101c004800631102c007NULL 0631103c004780631103c005650631103 c007 NULL

C语言连接SQL数据库

连接到SAMPLE数据库,查询LASTNAME为JOHNSON的FIRSTNAME信息。#include #include #include #include "util.h" #include EXEC SQL INCLUDE SQLCA; (1) main() { EXEC SQL BEGIN DECLARE SECTION; (2) char firstname[13]; char userid[9]; char passwd[19]; EXEC SQL END DECLARE SECTION; EXEC SQL CONNECT TO sample; (3) EXEC SQL SELECT FIRSTNME INTO :firstname (4) FROM employee WHERE LASTNAME = 'JOHNSON';(4) printf( "First name = %s\n", firstname ); EXEC SQL CONNECT RESET; (5) return 0; }

上面是一个简单的静态嵌入SQL语句的应用程序。它包括了嵌入SQL的主要部分: (1)中的include SQLCA语句定义并描述了SQLCA的结构。SQLCA用于应用程序和数据库之间的通讯,其中的SQLCODE返回SQL语句执行后的结果状态。(2)在BEGIN DECLARE SECTION和END DECLARE SECTION之间定义了宿主变量。宿主变量可被SQL语句引用,也可以被C语言语句引用。它用于将程序中的数据通过SQL语句传给数据库管理器,或从数据库管理器接收查询的结果。在SQL语句中,主变量前均有“:”标志以示区别。 (3)在每次访问数据库之前必须做CONNECT操作,以连接到某一个数据库上。这时,应该保证数据库实例已经启动。 (4)是一条选择语句。它将表employee中的LASTNAME为“JOHNSON”的行数据的FIRSTNAME查出,并将它放在firstname变量中。该语句返回一个结果。可以通过游标返回多个结果。当然,也可以包含update、insert和delete语句。(5)最后断开数据库的连接。 从上例看出,每条嵌入式SQL语句都用EXEC SQL开始,表明它是一条SQL 语句。这也是告诉预编译器在EXEC SQL和“;”之间是嵌入SQL语句。如果一条嵌入式SQL语句占用多行,在C程序中可以用续行符“\”。 C语言与SQL SERVER数据库

C语言连接数据库的代码

附一源码 CWinApp theApp; using namespace std; CHmbAdoDBRs RfRst; CString sSql; CString seq, body, eng, tm, tl, icol, ecol, alc, bhmcdate; int i; BOOL DbOpen(); BOOL CkseqtmpSelect(); BOOL CkseqtmpUpdate(); int PrintStatus(); int SockInit(); CHmbAdoDB Sqldb; int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int cnt = 0; int nRetCode = 0; int page = 1; int prt_ret; CString strDate, strTime; // initialize MFC and print and error on failure if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { // TODO: change error code to suit your needs cerr << _T("Fatal Error: MFC initialization failed") << endl; nRetCode = 1; } //DataBase Open... if(DbOpen()) cout << "DataBase Open Open Ok" << endl; else { cout << "DataBase Open Error\n" << endl; return -1; } while( 1 ) { ret = SockInit(); //建立socket连接 if ( ret < 0 ) Sleep(3000); else break;

C连接MYSQL数据库的3种方法及示例

C# 连接MYSQL数据库的方法及示例 连接MYSQL数据库的方法及示例 方法一: using MySql、Data using MySql、Data、MySqlClient; 其她操作跟SQL就是差不多,无非就就是前缀变成MySql了、 补充: 下面就是连接字符串,供参考、 MySqlConnection con = new MySql、Data、MySqlClient、 MySqlConnection("Database='testdb';Data Source='localhost';User Id='db';Password='apple';charset='utf8'"); con、Open(); MySqlCommand cmd = new MySqlCommand(); cmd、Connection = con; 使用MYSQL推出的MySQL Connector/Net is an ADO、NET driver for MySQL 该组件为MYSQL为ADO、NET访问MYSQL数据库设计的、NET访问组件。 安装完成该组件后,引用命名空间MySql、Data、MySqlClient; 使用命令行编译时:csc /r:MySql、Data、dll test、cs 方法二: 通过ODBC访问MYSQL数据库 访问前要先下载两个组件:odbc、net与MYSQL的ODBC驱动(MySQL Connector/ODBC (MyODBC) driver)目前为3、51版 安装完成后,即可通过ODBC访问MYSQL数据库 方法三: 使用CoreLab推出的MYSQL访问组件,面向、NET 安装完成后,引用命名空间:CoreLab、MySql; 使用命令编译时:csc /r:CoreLab、MySql、dll test、cs 以下为访问MYSQL数据库实例 编译指令:csc /r:CoreLab、MySql、dll /r:MySql、Data、dll test、cs using System; using System、Net; using System、Text; using CoreLab、MySql; using System、Data、Odbc; using MySql、Data、MySqlClient; class ConnectMySql {

C_连接sql数据库执行简单的增删改查操作

以users表为例,有三个字段,自增长的编号id,int类型;名称name,nvarchar 类型,密码pwd,nvarchar类型 首先在vs2005中引入using System.Data.SqlClient;命名空间 ///

/// 增加 /// /// 姓名 /// 密码 /// public int Insert(string name,string pwd) { SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=Test;Integrated Security=True");//Initial Catalog后面跟你数据库的名字,如果你的SqlServer服务器名称后面不带SQLEXPRESS,那么Data Source=. conn.Open(); string sql = "insert into users(name,pwd) values(@name,@pwd)"; SqlCommand cmd = new SqlCommand(sql,conn); SqlParameter parn = new SqlParameter("@name",name); cmd.Parameters.Add(parn); SqlParameter parp = new SqlParameter("@pwd", pwd); cmd.Parameters.Add(parn); int result = cmd.ExecuteNonQuery();//result接收受影响行数,也就是说result大于0的话表示添加成功 conn.Close(); cmd.Dispose(); return result; } /// /// 删除 /// /// 姓名 /// 密码 /// public int Update(int id) { SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=Test;Integrated Security=True");//Initial Catalog后面跟你数据库的名字,如果你的SqlServer服务器名称后面不带SQLEXPRESS,那么Data Source=.

c语言连接数据库

使用C语言操作MySQL数据库 1.连接数据库。 从C语言连接MySQL数据库包含两个步骤: a)初始化连接句柄结构; b)实际创建连接。 首先使用mysql_init初始化连接句柄: MYSQL * mysql_init (MYSQL *); 通常传递一个空指针给mysql_init这个函数,它会返回一个指向新分配的连接句柄结构的指针。 如果传递一个已有的结构,他将被重新初始化。如果出错,返回NULL。 初始化成功后,则使用mysql_real_connect来创建一个实际的连接: MYSQL * mysql_real_connect(MYSQL * connection, const char * server_host, const char * sql_user_name, const char * sql_password, const char *db_name, unsigned int port_number, const char * unix_socket_name, unsigned int flags

); connection必须是已经初始化的连接句柄结构,server_host可以是主机名,也可以是IP地址,如果仅仅连接到本机, 可以使用localhost来优化连接类型。port_number和unix_socket_name应该分别为0和NULL,除非改变了MYSQL安装的默认设置。 如果无法连接,返回NULL。完成连接后,在程序正常退出前,应该使用mysql_close关闭这个连接句柄。 void mysql_close(MYSQL * connection); 现在我们试图调用以上函数来建立一个对以上已经建好的数据库的访问,程序为connect1.c。内容如下: #include #include #include "mysql.h" int main (int argc, char *argv[]) { MYSQL *conn_ptr; conn_ptr=mysql_init(NULL); //连接初始化 if(!conn_ptr){ fprintf(stderr, "mysql_init failed\n"); return EXIT_FAILURE;

C语言中数据库接口的设计与实现

Computer Science and Application 计算机科学与应用, 2019, 9(8), 1554-1560 Published Online August 2019 in Hans. https://www.360docs.net/doc/6413914918.html,/journal/csa https://https://www.360docs.net/doc/6413914918.html,/10.12677/csa.2019.98174 Design and Implementation of Database Interface in C Language Ping Wang Fuzhou University of International Studies and Trade, Fuzhou Fujian Received: July 28th, 2019; accepted: August 12th, 2019; published: August 19th, 2019 Abstract After explaining the characteristics of C language and the importance of database technology, this paper introduces the Union and extensiveness of the two technologies in the application of equipment process control. It focuses on the detailed analysis of the database interface technology encountered in the system development, and shows its application field from one side through an example. Keywords C Language, Database, Interface Technology, Development and Application C语言中数据库接口的设计与实现 王平 福州外语外贸学院,福建福州 收稿日期:2019年7月28日;录用日期:2019年8月12日;发布日期:2019年8月19日 摘要 本文在阐述C语言的特点以及数据库技术的重要性之后,简述了二者在设备过程控制应用中的结合性和广泛性,着重就系统开发中碰到的数据库的接口技术进行详细解析,并通过一个示例从一个侧面展示了其应用领域。 关键词 C语言,数据库,接口技术,开发应用

VC连接数据库

>1.VC连接SQL Server数据库时,需要作哪些设置? ----------------------------------------------------- (1)初始化COM库,引入ADO库定义文件 (2)用Connection对象连接数据库 (3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得 结果记录集进行查询、处理。 (4)使用完毕后关闭连接释放对象。 >2.ADO、OLEDB、ODBC、DAO等几个数据库相关的词分别什么意思?有什么关系? ----------------------------------------------------- 是几种不同的数据库连接方式. OLEDB 是一种基于组件对象的数据库连接方式. ADO 是建立在OLEDB 基础之上的一种简单快速的OLEDB 连接方式. ODBC 各数据库厂商基于Microsoft 开发给他们的数据库公共接口而开发的连接方式. DAO 是微软开发的更简单的数据连接方式, 早期使用得比较多. >3.VC连接数据库的简要步骤。 ----------------------------------------------------- 手上有一些, 顺便在网上看了一下, 下面这个应该是对的. https://www.360docs.net/doc/6413914918.html,/413/1839913.shtml 以下提供一个VC + ADO 数据库连接方式的主要代码: #import "c:\Program Files\Common Files\system\ado\msadox.dll" rename_namespace("ADO X") #import "c:\Program Files\Common Files\System\ADO\msado15.dll" \ rename_namespace("ADO") rename("EOF", "EndOfFile") #pragma warning (disable: 4146) #include "icrsint.h" #include "Shlwapi.h" #pragma comment(lib,"Shlwapi.lib") using namespace ADO; CoInitialize(NULL); using namespace ADOX; _CatalogPtr m_pCatalog = NULL; CString strConnection, strTable; TCHAR chFilePath[MAX_PATH]; GetModuleFileName(NULL,chFilePath,MAX_PATH); (_tcsrchr(chFilePath, '\\'))[1] = 0;

C操作数据库

如果一个ODBC API函数执行成功,则返回SQL_SUCCESS或SQL_SUCCESS_WITH_INFO,SQL_SUCCESS指示可通过诊断记录获取有关操作的详细信息,SQL_SUCCESS_WITH_INFO 指示应用程序执行结果带有警告信息,可通过诊断记录获取详细信息。如果函数调用失败,返回码为SQL_ERROR。 1. SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv); 1. 初始化环境变量 在CLI中有三个句柄,分别是环境句柄、连接句柄、语句句柄。在初始化过程中首先要对前两个句柄逐一进行获取,获取成功后可连接数据库并获取第三个句柄。 SQLRETURN ret; SQLHENV henv; // 环境句柄 SQLHDBC hdbc; // 连接句柄 SQLHSTMT hstmt; // 语句句柄 SQLCHAR DBNAME[]="SAMPLE"; //数据库名 SQLCHAR USERNAME[]="db2admin"; // 用户名 SQLCHAR PSW[]="ibmdb2"; // 口令 ret=SQLAllocEnv(&&henv) //分配环境句柄 ret=SQLAllocConnect(henv,&&hdbc) //分配连接句柄 ret=SQLSetConnectOption(hdbc,SQL_AUTOCOMMIT,SQL_AUTOCOMMIT_OFF) //设置连接属性 ret=SQLConnect(hdbc,DBNAME,SQL_NTS,USERNAME,SQL_NTS,PSW,SQL_NTS) //连接数据库 ret=SQLAllocStmt(hdbc,&&hstmt) //分配语句句柄 上面的每个函数都有返回值,如果函数成功,ret值为SQL_SUCCESS,否则将返回错误代码。

Visual C采用ODBC方式连接Oracle数据库

Visual C++ 采用ODBC方式连接Oracle数据库不同的DBMS在支持的字段类型、可用的字段类型属性、访问目录或系统信息的能力和对相关完整性的支持程序等方面基本是不同的,同时各数据库供应商提供自己专用的API接口,提供程序员访问DBMS,如果一个程序需要与不同的数据库接口时,程序员须分别学习不同的API。ODBC(Open Database Connectivity开放数据库连接)就是解决异种数据库访问的问题。 ODBC是一种使用SQL语言程序标准接口之一,是应用程序和数据库系统之间的中间件。它通过使用相应应用平台上所需数据库对应的驱动程序与应用程序的交互来实现对数据库的操作,减少编写数据库应用程序时与数据源直接接触造成的复杂性,从而提供了数据库的独立性。用户程序通过ODBC访问多个数据库的关系如图: 1、Visual C++ 、ODBC和Oracle数据库之间的关系 Visual C++ 数据库应用程序-ODBC和Oracle数据库(ODBC32.DLL)-OracleODBC驱动程序(SQORA.DLL)-OCI调用层(ORAWIN.DLL)-SQL*Net驱动程序网络软件-(PCTCP,NovellNetware-Microsoft LAN Manager,etc,.)-SQL*Net侦听-Oracle数据库。 2、ODBC以及MFC的OCBC类 在Visual C++开发应用,使用ODBC SDK函数访问Oracle数据库是开发程序的方法之一,但这种方法编程工作量大。通过微软封装OCBC功能的MFC类,很方便实现用Visual C++开发基于Oracle数据库的应用程序。 MFC提供了4数据库类:CDatabase、CRecordset、CRecordView及CDBException。 CDatabase类:封装了与数据库建立连接,控制事务的提交和回滚及执行SQL语句的方法。 CRecordset类:封装了大部分操纵数据库的方法,包括浏览、修改记录,控制游标移动,排序等操作。 CRecordView类:提供了与Recordset对象相连接的视图,可以建立视图中的控件与数据库数据的对应,同时支持移动游标,修改记录等操作。 CDBException类:提供了对数据库操作的异常处理,可以获得操作异常的相关返回代码。 3、在Visual C++中采用ODBC编程的主要步骤: (1)使用Visual C++的AppWizard,选择连接的数据类型,生成ODBC框架程序。 (2)假设该程序project Name 为Exam,则程序生成CexamSet类,它是CRecordset类的派生类,它的成员变量中包含了数据库对应表中的列表项,这实现了对数据库的访问。 (3)在CexamDoc类中,包含m_examSet变量,它是CexamSet的对象。由于它被嵌在文档对象中,文档对象被构造时,它也会自动构造,文档对象被删除时,它会被删除。程序通过m_examSet来访问数据库,从而实现对多个数据记录集合的访问。 (4)在CexamView类中,在OnInitialUpdate()成员函数处,有m_pSet=&GetDocument()->m_examSet,此实现了在视图中通过文档类中的m_examSet对象来直接访问数据库。

C语言连接MySQL数据库

C语言连接MySQL数据库收藏 前几天公司让我做C语言和MySQL数据库的交互操作,费了九牛二虎之力之后总算做出来了,今天特地把源代码贴出来供大家学习;如有人想要打包项目可以加我QQ260990509,注明技术交流,即可获得打包之后的项目! #if defined(_WIN32) || defined(_WIN64) //为了支持windows平台上的编译 #include #endif #include #include #include "mysql.h" #include #include #include MYSQL mysql,*sock; //定义数据库连接的句柄,它被用于几乎所有的MySQL函数 MYSQL_RES *res; //查询结果集,结构类型 MYSQL_FIELD *fd ; //包含字段信息的结构 MYSQL_ROW row ; //存放一行查询结果的字符串数组 char qbuf[300]; //存放查询sql语句字符串 //定义数据库操作的宏,也可以不定义留着后面直接写进代码 #define MAX_STRING_LENGTH 256 //定义元素个数 #define MAX_ELEMENT_LENGTH 33 //定义显示的列数 #define ELEMENTS_PER_LINE 15 typedef struct { char line[MAX_STRING_LENGTH]; char data[ELEMENTS_PER_LINE][MAX_ELEMENT_LENGTH]; }DATA; void main() { //申明数据库操作函数 int insertData(DATA parameter); //打开指定文件 FILE *fp=fopen("E:\\file.txt","r"); //创建结构体类型实体 DATA data; memset(&data, 0x00, sizeof(DATA)); //得到一行数据 fgets(data.line, MAX_STRING_LENGTH, fp);

C与SQL数据库学生成绩管理系统完整代码

数据库技术及应用项目设 计报告 学生成绩管理系统 姓名:Celia Yan 2015-01-07

一.设计目的及意义 在如今的高校日常管理中,学生成绩管理系统是其中非常重要的一环,特别是当前学校规模不断扩大,学生人数日益增加,课程门类多,校区分散等实际情况,学生成绩统计功能越来越繁重,稍有疏忽就会出现差错。因此,学生成绩管理系统更具有非常大的实际应用意义。在互联网快速崛起的今天,改革传统的手工录入方式,公正,准确,及时反映学生的信息和成绩的情况,以适应信息时代的要求,是学生成绩管理系统的一个新的理念。通过成绩管理可以大大提高学校的工作效率。学生成绩管理系统应该完成以下两个方面的内容:学生档案资料的管理、学生成绩的管理。通过学生成绩管理系统可以做到信息的规范管理,科学统计和快速查询、修改、增加、删除等,减少管理方面的工作量。 二.主要功能 该系统主要用于学校学生信息管理,总体任务是实现学生信息关系的系统化、规范化和自动化,其主要任务是用计算机对学生信息进行日常管理,如查询、修改、增加、删除,另外还考虑到用户登录的权限,针对学生信息和权限登录的学生成绩管理系统。 本系统主要包括注册管理、教师管理、学生信息查询、添加、修改、删除等部分。其主要功能有: (1)学生信息的添加,包括输入学生基本信息和成绩。 (2)学生信息的查询,包括查询学生的基本信息和成绩。 (3)学生信息的修改,包括修改学生基本信息和成绩。 (4)学生信息的删除,包括删除学生基本信息和成绩。 (5)登录用户密码修改,用户登录到系统可进行相应的用户密码修改。 (6)管理员用户对用户名的管理,包括添加新用户、删除用户。 学生成绩管理系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及前端应用程序开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性

Csharp连接数据库(vs2010编写)

说明:该文件是一个Csharp类,直接导入,然后连接的是(local)数据库,数据库名字为Stu_management,根据自己的需要可以更改,数据库为windows身份验证。 string my_str = "server=localhost;database=Stu_management;Integrated Security=SSPI"; 其中,serve表示数据库的服务器名字,database表示数据库名字,Integrated Security=SSPI 表示数据库为windows身份验证,不需要输入密码验证进入数据库。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Windows.Forms; using System.Data.SqlClient; namespace Stu_Ach__Man_Sys { class sqlcon { string my_str = "server=localhost;database=Stu_management;Integrated Security=SSPI"; SqlConnection my_con; SqlCommand cmd; SqlDataAdapter sda;

DataSet ds; DataTable dt; public void GetCon() { try { my_con = new SqlConnection(my_str); my_con.Open(); } catch { MessageBox.Show("数据库链接失败"); } } public void CloseCon() { my_con = new SqlConnection(my_str); if (my_con.State == ConnectionState.Open) { my_con.Close(); } } public string GetData(string tab, string column, string data) { string output = ""; GetCon(); cmd = new SqlCommand(); cmd.Connection = my_con; if(tab == "Admin") https://www.360docs.net/doc/6413914918.html,mandText = "SELECT " + column + " FROM " + tab + " WHERE Uid = " + "'" + data + "'"; else if(tab == "info") https://www.360docs.net/doc/6413914918.html,mandText = "SELECT " + column + " FROM " + tab + " WHERE Sid = " + "'" + data + "'"; else if(tab == "Class") https://www.360docs.net/doc/6413914918.html,mandText = "SELECT " + column + " FROM " + tab + " WHERE Class = " + "'" + data + "'"; else if (tab == "Subject") https://www.360docs.net/doc/6413914918.html,mandText = "SELECT " + column + " FROM " + tab

相关文档
最新文档