19.4    SQL中嵌入式SQL的编译运行
C语言中嵌入SQL语句的方式 在pubs数据库中创建一个mystudent表 插入数据 读取显示。
第一步:编写预编译代码
具体代码如下:c语言实现
#include <stdio.h>
#include <stdlib.h>
EXEC SQL INCLUDE sqlca;
int main()
{
    EXEC SQL BEGIN DECLARE SECTION;
    //用于定义用于登录数据库操作的一些变量
    char sno[5];
    char sname[10];
    int age;
    char city[10];
    short cityInd;
    EXEC SQL END DECLARE SECTION;
    printf("嵌入式SQL的应用\n");
   
    EXEC SQL CONNECT TO pubs USER sa.790904;
    if(SQLCODE==0)
    {
      printf("数据库连接成功!\n");
    }
    else
    {
      //连接DBMS
      printf("ERROR:连接数据库失败!");
      return (1); 
    }
    //程序的主体部分
    EXEC SQL create table mystudent(sql2000数据库在哪个文件夹
    sno  char(5) primary key,
    sname char(10) not null,
    age int,
        city char(10)
    );
    EXEC SQL insert into mystudent values('9601','王永',21,'天津');
    EXEC SQL insert into mystudent values('9602','李萍',19,'北京');
    EXEC SQL insert into mystudent values('9603','高太',20,'天津');
    EXEC SQL insert into mystudent values('9604','刘静',20,'天津');
    EXEC SQL insert into mystudent values('9605','王东',23,'上海');
    EXEC SQL insert into mystudent values('9606','李大为',22,null);
    EXEC SQL WHENEVER SQLERROR GOTO error;
    EXEC SQL WHENEVER NOT FOUND GOTO done;
    EXEC SQL DECLARE mystudentCursor CURSOR FOR
      SELECT sname,city from mystudent;
    EXEC SQL OPEN mystudentCursor;
    printf("mystudent表中的姓名和城市信息如下:\n");
    for(;;){
        //fetch net row of the result table
    EXEC SQL FETCH mystudentCursor INTO:sname,:city:cityInd;
    //display data
    printf("姓名:%s ",sname);
    if(cityInd<0)//通过设置指示变量,并判断指示变量的值<0来确认输出null值
      printf("城市:NULL\n");
    else
        printf("城市:%s\n",city);   
    }
  error:
      printf("SQL error %d\n",sqlca->sqlcode);
  done:
      //close the cursor befor the comleting
    EXEC SQL WHENEVER SQLERROR continue;
    EXEC SQL CLOSE mystudentCursor;
    EXEC SQL COMMIT WORK RELEASE;//释放资源 清除环境
    EXEC SQL DISCONNECT ALL;
    return 0;
}
文本编辑器编辑,并保存为esqlc.sqc
第二步:预编译文件
预编译器 在安装目录的MSSQL\Binn下
【由于典型安装方式并没有安装应用程序,需要到安装盘中x86\binn目录下copy】
  Sql Server 2000 为其嵌入式SQL提供了一些特殊的接口,然而默认的安装并没有安装这些接口,因此需要把安装盘中的devtools文件夹中的文件拷贝到SQL SERVER的系统目录下边(注意 系统目录不是安装目录)。
1. 初始化Visual C++6.0 编译器环境
  这个过程要在DOS下运行,到vcvars32.bat的路径,在DOS下运行。本机vcvars32.bat  文件所在路径为D:\Program Files\Microsoft Visual Studio\VC98\Bin\ VCVARS32.bat
开始 运行 cmd
2. 初始化预编译环境
运行文件 C:\Program Files\Microsoft SQL Server\devtools\samples\esqlc\setenv.bat
运行方式同上
下来就可以利用预处理程序 对文件esqlc.sqc进行预编译 生成.c文件。
将esql.sqc文件copy到MSSQL\Binn目录下,预编译命令“nsqlprep esql.sqc”的方式运行该文件,运行成功后 生成.c文件
第三步:设置Visual C++6.0链接
经过预处理后的.c文件就可以进行编译。
这时 需要用到动态链接库 SQLakw32.dll和sqlaiw32.dll 此两个文件已经被copy到\MSSQL\Binn下面,然是仍需要把路径添加到系统的路径变量中。步骤如下:
1. 把这两个文件copy到操作系统目录的子目录system32下
2. 把Microsoft\MSSQL\Binn加到系统环境变量path中,
3. 启动Visual C++ 6.0,新建一个Win32 Console Application工程 名字:test
4. 初始化visual c++ 6.0环境
增加头文件 和 库文件两个directories
添加 %home%\ Microsoft SQL Server \devtools\include  到Include files
添加 %home%\ Microsoft SQL Server\devtools\x86lib
5. 添加必要的库文件 SQLakw32.lib和Caw32.lib
Alt+F7 单击link选项卡 添加这两个库文件
6. Visual C++ 6.0编译嵌入式SQL环境设置完毕
第四步:编译运行程序
在test工程中,菜单 工程 增加工程 文件,将前面预编译生成的.c文件添加到此Project中
编译、连接、运行
作者:renxixinguan@126

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。