Word文档:传送门
嵌入式SQL的C语言应用程序在VC++6.0、SQL Server 2000环境下的调试可分为五步:
第一步 环境初始化;
第二步 预编译;
第三步 编译;
第四步 连接;
第五步 运行。
一、软件安装及环境配置
1.将“DEVTOOLS”文件夹复制到“C:\\Program Files\\Microsoft SQL Server”。
2.初始化VC++编译器环境。在命令行方式下运行文件“\\VC98\\Bin\\vcvars32.bat”。
3.初始化SQLServer预编译环境。命令行运行“\\Devtools\\samples\\esqlc\\setenv.bat”。
4.将“binn”文件夹内容复制到“C:\\Program Files\\Microsoft SQL Server\\MSSQL\\Binn”。
5.VC6.0环境配置。具体配置分为如下三步:
①Tools->options->directories->Include Files:添加 C:\\Program Files\\Microsoft SQL Server\\devtools\\include。将SQL server自带的用于数据库开发的头文件包含到工程环境中。
②Tools->options->directories->Lib Files:添加C:\\Program Files\\Microsoft SQL Server\\devtools\\x861ib。将开发用到的包包含到工程中。
③Tools->options->directories->Executable Files:添加 C:\\Program Files\\ Microsoft SQL Server\\MSSQL\\Binn。
6.以管理员身份打开CMD进行注册,regsvr32 \"VC6\\Common\\MSDev98 \\AddIns\\FileTool.dll\",
7.提示成功,打开VC6.0,右击工具栏,选择 自定义--->附加项和宏文件,选中FileTool Developer Studio Add-in附加项
2、预编译
1)复制ESQL预编译文件及库文件
C语言编译程序不能识别应用程序中的SQL语句,需要经过预处理程序将其转换成C语句。SQL Server的预处理程序是nsqlprep.exe。 nsqlprep.exe在SQL Server安装日录的MSSQL\\Binn下。若SQL Server数据库采用的是默任安装方式,则需要把nsqlprep.exe、SQLAIW32.DLL、SQLAKW32.DLL三个文件拷贝到MSSQL\\Binn目录下。
2)将动态链接库SQLAKW32.dll,SQLAIW32.dll文件拷贝到操作系统目录下的子目录C:\\WINDOWS\\system32中。
3)创建嵌入式SQL的C源文件Esql.c
#include <stdio.h>
#include <stdlib.h>
EXEC SQL BEGIN DECLARE SECTION; /*主变量说明开始*/
char deptname[22];
char HSno[10];
char HSname[22];
char HSsex[4];
int HSage;
int NEWAGE;
long SQLCODE;
EXEC SQL END DECLARE SECTION; /*主变量说明结束*/
EXEC SQL INCLUDE sqlca; /*定义SQL通信区*/
/*************************************************************************/
int main(void) /*C语言主程序开始*/
{
int count = 0;
char yn; /*变量yn代表yes或no*/
printf(\"Please choose the department name(CS/MA/IS): \");
scanf(\"%s\", deptname); /*为主变量deptname赋值*/
EXEC SQL CONNECT TO Student; /*连接数据库STUDENTDb*/
EXEC SQL DECLARE SX CURSOR FOR /*定义游标*/
SELECT Sno, Sname, Ssex, Sage /*SX对应语句的执行结果*/
FROM Student
WHERE SDept = :deptname;
EXEC SQL OPEN SX; /*打开游标SX便指向查询结果的第一行*/
for (;;) /*用循环结构逐条处理结果集中的记录*/
{
EXEC SQL FETCH SX INTO :HSno, :HSname, :HSsex,:HSage;
/*推进游标,将当前数据放入主变量*/
if (sqlca->sqlcode != 0) /* sqlcode != 0,表示操作不成功*/
{printf(\"数据处理结束!\");
break; /*利用SQLCA中的状态信息决定何时退出循环*/}
if(count++ == 0) /*如果是第一行的话,先打出行头*/
printf(\"\\n%-10s %-22s %-4s %-10s\\n\", \"Sno\", \"Sname\", \"Ssex\", \"Sage\");
printf(\"%-10s %-22s %-4s %-10d\\n\", HSno, HSname, HSsex, HSage);
/*打印查询结果*/
printf(\"UPDATE AGE(y/n)?\"); /*询问用户是否要更新该学生的年龄*/
do{
scanf(\"%c\",&yn);
}
while(yn != \'N\' && yn != \'n\' && yn != \'Y\' && yn != \'y\');
if (yn == \'y\' || yn == \'Y\') /*如果选择更新操作*/
{
printf(\"INPUT NEW AGE:\");
scanf(\"%d\",&NEWAGE); /*用户输入新年龄到主变量中*/
EXEC SQL UPDATE Student /*嵌入式SQL*/
SET Sage = :NEWAGE
WHERE CURRENT OF SX ;
} /*对当前游标指向的学生年龄进行更新*/
}
EXEC SQL CLOSE SX; /*关闭游标SX不再和查询结果对应*/
EXEC SQL COMMIT WORK; /*提交更新*/
EXEC SQL DISCONNECT TEST; /*断开数据库连接*/
}
4)关闭C源文件MyEsql.c,并将其备份,然后更改源文件的扩展名为“.sqc”。
5)在命令行下运行ESQL预编译程序nsqlprep.exe程序:
nsqlprep MyEsql.sqc 若运行成功,则生成MyEsql.c,将该文件添加到VC工程中编译即可。
6)编译,连接与运行
在VC++6.0中创建一个 \"WIN32 Console Application\"的Proiect,然后将预编译生成的c文件加入Proiect,编译连接即可生成访问SQL Server的可执行程序。
6. 出现的问题:
实验上机前,因为个人电脑安装C++在D盘,所以实验初始化Visual C++ 6.0编译器环境以及初始化SQL Server的预编译环境时,利用附件里的运行程序直接浏览编译再运行文件。
在联系到数据库时需要建立一个数据库名首字母不为数字的标示符,以便运行。在实验上机时不能运用附件的运行程序运行文件。故所有的运行程序必须在在命令行方式下运行。
继续阅读与本文标签相同的文章
一文告诉你:互联网如何改变我们的生活
PHP登陆后跳转到登陆前页面实现思路及代码
-
Edge逐步融入Fluent Design元素:新版颜色筛选器控件上线
2026-05-18栏目: 教程
-
阿里云服务器突发性能实例t5配置性能使用场景及注意事项
2026-05-18栏目: 教程
-
Square为澳大利亚餐馆提供定制平台!
2026-05-18栏目: 教程
-
711便利店:日本计划关店1000家,母公司将裁员3000人
2026-05-18栏目: 教程
-
阿里云服务器共享型实例xn4 n4 性价比高适合个人博客 中小型网站
2026-05-18栏目: 教程
