C语言连接SQL数据库_第1页
C语言连接SQL数据库_第2页
C语言连接SQL数据库_第3页
C语言连接SQL数据库_第4页
C语言连接SQL数据库_第5页
已阅读5页,还剩4页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

连接到SAMPLE数据库,查询LASTNAME为JOHNSON得FIRSTNAME信息。

#include

<stdio、h>

#include

<stdlib、h>

#include

<string、h>

#include

"util、h"

#include

<sqlca、h>

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程序中可以用续行符“\”。HYPERLINK""C语言与SQLSERVER数据库1、使用C语言来操作SQLSERVER数据库,采用ODBC开放式数据库连接进行数据得添加,修改,删除,查询等操作。ﻫ

step1:启动SQLSERVER服务,例如:HNHJ,开始菜单->运行->netstartmssqlserver

step2:打开企业管理器,建立数据库test,在test库中建立test表(avarchar(200),bvarchar(200))ﻫ

step3:建立系统DSN,开始菜单->运行->odbcad32,

添加->SQLSERVER

名称:csql,服务器:HNHJ

使用用户使用登录ID与密码得SQLSERVER验证,登录ID:sa,密码:ﻫ

更改默认得数据库为:testﻫ

、、、

测试数据源,测试成功,即DNS添加成功。2、cpp文件完整代码//##########################save、cpp##########################C代码

HYPERLINK"javascript:void()"\o"收藏这段代码"#include

<stdio、h>

#include

<string、h>

#include

<windows、h>

#include

<sql、h>

#include

<sqlext、h>

#include

<sqltypes、h>

#include

<odbcss、h>

SQLHENV

henv

=

SQL_NULL_HENV;

SQLHDBC

hdbc1

=

SQL_NULL_HDBC;

SQLHSTMT

hstmt1

SQL_NULL_HSTMT;

/*

cpp文件功能说明:

1、数据库操作中得添加,修改,删除,主要体现在SQL语句上

2、采用直接执行方式与参数预编译执行方式两种

*/

int

main(){

RETCODE

retcode;

UCHAR

szDSN[SQL_MAX_DSN_LENGTH+1]

=

"csql",

szUID[MAXNAME]

"sa",

szAuthStr[MAXNAME]

=

"";

//SQL语句

//直接SQL语句

UCHAR

sql[37]

"insert

into

test

values('aaa','100')";

//预编译SQL语句

UCHAR

pre_sql[29]

=

"insert

into

test

values(?,?)";

//1、连接数据源

//1、环境句柄

retcode

=

SQLAllocHandle

(SQL_HANDLE_ENV,

NULL,

&henv);

retcode

SQLSetEnvAttr(henv,

SQL_ATTR_ODBC_VERSION,

(SQLPOINTER)SQL_OV_ODBC3,

SQL_IS_INTEGER);

//2、连接句柄

retcode

=

SQLAllocHandle(SQL_HANDLE_DBC,

henv,

&hdbc1);

retcode

=

SQLConnect(hdbc1,

szDSN,

4,

szUID,

2,

szAuthStr,

0);

//判断连接就是否成功

if

(retcode

!=

SQL_SUCCESS)

&&

(retcode

!=

SQL_SUCCESS_WITH_INFO)

)

{

printf("连接失败!\n");

else

{

//2、创建并执行一条或多条SQL语句

/*

1、分配一个语句句柄(statement

handle)

2、创建SQL语句

3、执行语句

4、销毁语句

*/

retcode

=

SQLAllocHandle(SQL_HANDLE_STMT,

hdbc1,

&hstmt1);

//第一种方式

//直接执行

//添加操作

//SQLExecDirect

(hstmt1,sql,37);

//第二种方式

//绑定参数方式

char

a[200]="bbb";

char

b[200]="200";

SQLINTEGER

p

=

SQL_NTS;

//1预编译

SQLPrepare(hstmt1,pre_sql,29);

//第三个参数与数组大小相同,而不就是数据库列相同

//2绑定参数值

SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);

SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&b,0,&p);

//3

执行

SQLExecute(hstmt1);

printf("操作成功!");

//释放语句句柄

SQLCloseCursor

(hstmt1);

SQLFreeHandle

(SQL_HANDLE_STMT,

hstmt1);

}

//3、断开数据源

/*

1、断开与数据源得连接、

2、释放连接句柄、

3、释放环境句柄

(如果不再需要在这个环境中作更多连接)

*/

SQLDisconnect(hdbc1);

SQLFreeHandle(SQL_HANDLE_DBC,

hdbc1);

SQLFreeHandle(SQL_HANDLE_ENV,

henv);

return(0);

//##########################list、cpp##########################C代码

HYPERLINK"javascript:void()"\o"收藏这段代码"#include

<stdio、h>

#include

<string、h>

#include

<windows、h>

#include

<sql、h>

#include

<sqlext、h>

#include

<sqltypes、h>

#include

<odbcss、h>

SQLHENV

henv

=

SQL_NULL_HENV;

SQLHDBC

hdbc1

=

SQL_NULL_HDBC;

SQLHSTMT

hstmt1

=

SQL_NULL_HSTMT;

/*

查询SQLSERVER数据库,1、条件查询,2、直接查询全部

*/

int

main(){

RETCODE

retcode;

UCHAR

szDSN[SQL_MAX_DSN_LENGTH+1]

"csql",

szUID[MAXNAME]

=

"sa",

szAuthStr[MAXNAME]

=

"";

UCHAR

sql1[39]

=

"select

b

from

test

where

a

=

'aaa'";

UCHAR

sql2[35]

=

"select

b

from

test

where

a

=

?

";

UCHAR

sql3[19]

=

"select

b

from

test";

retcode

=

SQLAllocHandle

(SQL_HANDLE_ENV,

NULL,

&henv);

retcode

=

SQLSetEnvAttr(henv,

SQL_ATTR_ODBC_VERSION,

(SQLPOINTER)SQL_OV_ODBC3,

SQL_IS_INTEGER);

retcode

=

SQLAllocHandle(SQL_HANDLE_DBC,

henv,

&hdbc1);

//1、连接数据源

retcode

=

SQLConnect(hdbc1,

szDSN,

4,

szUID,

2,

szAuthStr,

0);

if

(

(retcode

!=

SQL_SUCCESS)

&&

(retcode

!=

SQL_SUCCESS_WITH_INFO)

{

printf("连接失败!");

}

else

//2、创建并执行一条或多条SQL语句

/*

1、分配一个语句句柄(statement

handle)

2、创建SQL语句

3、执行语句

4、销毁语句

*/

retcode

SQLAllocHandle(SQL_HANDLE_STMT,

hdbc1,

&hstmt1);

//第一种方式

/*

//直接执行

SQLExecDirect

(hstmt1,sql1,39);

char

list[5];

SQLBindCol(hstmt1,

1,

SQL_C_CHAR,

list,

5,

0);

SQLFetch(hstmt1);

printf("%s\n",list);

*/

//第二种方式

/*

//绑定参数方式

char

a[200]="aaa";

SQLINTEGER

=

SQL_NTS;

//1、预编译

SQLPrepare(hstmt1,sql2,35);

//第三个参数与数组大小相同,而不就是数据库列相同

//2、绑定参数值

SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);

//3、执行

SQLExecute(hstmt1);

char

list[5];

SQLBindCol(hstmt1,

1,

SQL_C_CHAR,

list,

5,

0);

SQLFetch(hstmt1);

printf("%s\n",list);

*/

//第三种方式全部输出

/*

1、确认一个结果集就是否可用。

2、将结果集得列绑定在适当得变量上。

3、取得行

*/

//3、检查结果记录(如果有得话)

SQLExecDirect

(hstmt1,sql3,19);

char

list[5];

SQLBindCol(hstmt1,

1,

SQL_C_CHAR,

list,

5,

0);

do{

retcode

SQLFetch(hstmt1);

if(retcode

==

SQL_NO_DATA){

break;

}

printf("%s\n",list);

}while(1);

//释放语句句柄

SQLCloseCursor

(hstmt1);

SQLFreeHandle

(SQL_HANDLE_STMT,

hstmt1);

//4、断开数据源

/*

1、断开与数据源得连接、

2、释放连接句柄、

3、释放环境句柄

(如果不再需要在这个环境中作更多连接)

*/

SQLDisconnect(hdbc1);

SQLFreeHandle(SQL_HANDLE_DBC,

hdbc1);

SQLFreeHandle(SQL_HANDLE_ENV,

henv);

return(0);

}

创建数据源得过程代码:#include<stdlib、h>

#inlcude<stdio、h>ﻫ#include<windows、h>ﻫ#include<sql、h>ﻫ#include<sqlext、h>ﻫ#include<Sqltypes、h>#defineSNO_LEN30ﻫ#defineNAME_LEN50

#defineDEPART_LEN100ﻫ#defineSSEX_LEN5intmain()ﻫ{ﻫ

/*Step1定义句柄与变量*/

//以king开头得表示得就是连接KingbaseES得变量ﻫ

//以server开头得表示得就是连接SQLSERVER得变量ﻫSQLHENV

kinghenv,serverhenv;

SQLHDBC

kinghdbc,serverhdbc;

SQLHSTMT

kinghstmt,serverhstmt;ﻫSQLRETURN

ret;ﻫSQLCHAR

sName[NAME_LEN],sDepart[DEPART_LEN],ﻫ

sSex[SSEX_LEN],sSno[SNO_LEN];

SQLINTEGERsAge;ﻫSQLINTEGRRcbAge=0,cbSno=SQL_NTS,cbSex=SQL_NTS,ﻫ

cbName=SQL_NTS,cbDepart=SQL_NTS;ﻫ

/*Step2初始化环境*/

ret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&kinghenv);ﻫret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&setverhenv);ﻫret=SQLSetEnvAttr(kinghenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);ﻫret=SQLSetEnvAttr(serverhenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);

/*Step3建立连接*/ﻫret=SQLAllocHandle(SQL_HANDLE_DBC,kinghenv,&kinghdbc);

ret=SQLAllocHandle(SQL_HANDLE_DBC,serverhenv,&serverhdbc);ﻫret=SQLConnect(kinghdbc,"KingbaseESODBC",SQL_NTS,"SYSTEM",ﻫ

SQL_NTS,"MANAGER",SQL_NTS);ﻫif(!SQL_SUCCEEDED(ret))

return-1;

//连接失败时返回错误值;

ret=SQLConnect(serverhdbc,"SQLServer",SQL_NTS,"sa",ﻫ

SQL_NTS,"sa",SQL_NTS);ﻫif(!SQL_SUCCEEDED(ret))

return-1;

//连接失败时返回错误值;ﻫ

/*Step4初始化语句句柄*/ﻫret=SQLAllocHandle(SQL_HANDLE_STMT,kinghdbc,&kinghstmt);

ret=SQLSetStmtAttr(kinghstmt,SQL_ATTR_ROW_BIND_TYPE(SQLPOINTER)

SQL_BIND_BY_COLUMN,SQL_IS_INTEGER);

ret=SQLAllocHandle(SQL_HANDLE_STMT,serverhdbc,&serverhstmt);ﻫ

/*Step5两种方式执行语句*/

/*预编译带有参数得语句*/ﻫret=SQLPrepare(sercerhstmt,"INSERTINTOSTUDENT(SNO,SNAME,SSEX,SAGE,SDEPT)ﻫ

VALUES(?,?,?,?,?)",SQL_NTS);

if(ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO)ﻫ{ﻫ

ret=SQLBindParameter(serverhstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,ﻫ

SQL_CHAR,SNO_LEN,0,sSno,0,&cbSNO);ﻫ

ret=SQLBindParameter(serverhstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,ﻫ

SQL_CHAR,SNAME_LEN,0,sName,0,&cbName);

ret=SQLBindParameter(serverhstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,ﻫ

SQL_CHAR,2,0,sSex,0,&cbSex);ﻫ

ret=SQLBindParameter(serverhstmt,4,SQL_PARAM_INPUT,SQL_C_LONG,ﻫ

SQL_INTEGE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论