版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
连接到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
p
=
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 警惕传染病害,守护健康未来几年级主题班会课件
- 旅游景区市场营销部人员绩效衡量表
- 电子支付安全保障与技术创新发展策略方案
- 文化传播机构项目经理文化内容生产效益考核评价绩效评定表
- 2027届安庆市望江县数学六年级第一学期期末质量跟踪监视模拟试题含解析
- 2026年邢台市清河县六上数学期末综合测试模拟试题含解析
- 2026年河南省洛阳市新安县数学六年级第一学期期末复习检测试题含解析
- 2027届安徽省怀远县包集中学七年级数学第一学期期末学业质量监测试题含解析
- 武夷学院《食品微生物学糖发酵》2026-2027学年第一学期期末试卷含解析
- 2026年度供应链管理改进通知函(5篇)
- 农民工工资专用账户管理补充协议
- 医学装备管理知识培训课件
- 国家开放大学电大《公共政策概论》机考3套真题题库及答案
- 拆除工程应急处置方案(3篇)
- 自治区“两高”项目管理若干政策措施、评估论证管理办法、固定资产投资项目能源消费替代管理办法征
- 好老师期中数学试卷
- 《双碳管理基础与实务》课件-第五章 碳资产
- 消防联动系统调试方案
- 土石方工程第一次原始地貌实测数据记录表
- 减震器知识培训课件图片
- JBT 8457-2024 冷挤压压接钳的一般要求和试验方法(正式版)
评论
0/150
提交评论