本资料由 曲师大 Guang15提供
? 初始化SQLServer的预编译环境,运行文件:
\\devtools\\samples\\esqlc\\setenv.bat。
运行方式与vcvars32.bat相同,结果如下:
3. 初始化Visual C++ 6.0环境。
? Tools->options->directories->Include Files: C:\\Program Files\\Microsoft Server\\devtools\\include
? Tools->options->directories->Lib Files:C:\\Program Files\\Microsoft Server\\devtools\\x86lib
注意:这些路径需要设为第一项。如下图所示:
SQL
SQL
26
本资料由 曲师大 Guang15提供
? Project->Settings->Link->Object/Library Modules,添
加库文件:
SQLakw32.lib,Caw32.lib
注意,两个文件之间用空格分开。
27
本资料由 曲师大 Guang15提供
实验活动
1. 阅读和分析程序esql.sqc,解释程序的主要内容和主要数据结构。 数据结构: 主要为在数据库中存储的表,及针对表进行的查找。 2. 对程序esql.sqc作适当的修改,使之可以在本地系统上可以运行。
进行预处理、编译、连接(lib连接),查看运行结果。 1)修改:
只需要对连接的服务器及数据库进行修改即可:
EXEC SQL CONNECT TO SKY.pubs USER abc.abc; 2)进行预处理:
将esql.sqc文件放在C:\\Program Files\\Microsoft SQL Server\\MSSQL\\Binn目录下,运行cmd,进入C:\\Program Files\\Microsoft SQL Server\\MSSQL\\Binn目录,用nsqlprep esql.sqc的方式运行该文件,可以在C:\\Program Files\\Microsoft
28
本资料由 曲师大 Guang15提供
SQL Server\\MSSQL\\Binn中找到预编译后生成的.c文件。
编写程序,使用嵌入式SQL实现如下的功能:
1. 编写程序,创建下列关系表,并插入数据。
create table provider (
SNO char(5) primary key, SNAME char(10) not null, STATUS int, CITY char(10) );
insert into provider values('S1','精益','20','天津'); insert into provider values('S2','胜锡','10','北京'); insert into provider values('S3','东方红','30','天津'); insert into provider values('S4','丰泰盛','20','天津'); insert into provider values('S5','为民','30','上海'); insert into provider values('S6','通天','25',null)
说明:以上两个步骤在两种方法中都是在同一个程序中实现,关键部分用黄
色标出,exp为在企业管理器中新建的数据库。
源程序如下:
A)用嵌入式SQL实现:
#include
int main() {
EXEC SQL BEGIN DECLARE SECTION;
29
//主变量 char sno[5]; char sname[10]; int status; char city[10];
short cityInd;//指示变量
本资料由 曲师大 Guang15提供
EXEC SQL END DECLARE SECTION;
printf(\
if (SQLCODE == 0) {
printf(\ } else {
// 连接DBMS错误
printf(\ return (1); }
EXEC SQL CONNECT TO SKY.exp USER sa.sa;//连接到数据库
//下面为程序的主体部分 sno char(5) status int, city char(10) );
EXEC SQL create table provider (
primary key,
sname char(10) not null,
EXEC SQL insert into provider values('S1','精益','20','天津'); EXEC SQL insert into provider values('S2','胜锡','10','北京'); EXEC SQL insert into provider values('S3','东方红','30','天津'); EXEC SQL insert into provider values('S4','丰泰盛','20','天津'); EXEC SQL insert into provider values('S5','为民','30','上海'); EXEC SQL insert into provider values('S6','通天','25',null); EXEC SQL WHENEVER SQLERROR GOTO error;//错误处理 EXEC SQL WHENEVER NOT FOUND GOTO done; EXEC SQL DECLARE providerCursor CURSOR FOR SELECT sname, city FROM
provider;
30
本资料由 曲师大 Guang15提供
for ( ; ; ) { }
printf (\//若照书上写
/* Fetch next row of the result table */
EXEC SQL FETCH providerCursor INTO :sname,:city:cityInd; /* display data */
printf (\
if ( cityInd< 0)//通过设置指示变量,并判断指示变量的值<0来确
printf (\printf (\
EXEC SQL OPEN providerCursor ;
认和输出null值
else
error:
sqlca.sqlcode编译报语法错 done: }
//断开连接
return 0;
EXEC SQL DISCONNECT ALL;
/* Close the cursor before completing*/ EXEC SQL WHENEVER SQLERROR continue; EXEC SQL CLOSE providerCursor; EXEC SQL COMMIT WORK RELEASE;
1.
31