SQL/CLI(数据库)
时间:2022-11-08 18:30:01 | 来源:信息时代
时间:2022-11-08 18:30:01 来源:信息时代
SQL/CLI : 应用程序访问数据库时执行SQL语句的调用级接口,该接口独立地执行SQL语句。
SQL/CLI实际上是执行SQL语言的一种联编方式,它可以用来代替嵌入式动态SQL,不过两者启动SQL语句的方式不同。SQL/CLI由一组例程组成,以分别实现与数据库的连接、数据交换、断开与数据库的连接等功能。SQL/CLI标准规定了例程的实现方法。具体实现由第三方软件开发商制作,例程的可执行代码一般存于动态链接库(DLL)中,可被应用程序访问数据库时动态调用,应用程序调用它们就像调用其他系统服务一样,如图1所示。
例程的不同实现方式,构成不同的驱动程序driver),在应用程序访问数据源时,由驱动程序管理器根据用户指定的数据源选择相应的驱动程序,以实现对不同数据源的访问。
1. SQL/CLI的功能
SQL/CLI驱动程序要实现的功能包括:
图1 使用SQL/CLI的应用程序原理
(1)分配资源和取消分配的资源。
(2)控制与SQL服务器的连接。
(3)用类似动态SQL的机制执行SQL语句。
(4)游标与诊断功能。
(5)控制事务终止。
2. SQL/CLI驱动程序遵循的规则
每个SQL/CLI例程都支持一个被定义成语句文本的输入字符串参数,这个语句文本必须符合以下规定:
(1)遵循SQL标准中对“可准备语句”指定的格式、语法规则和访问规则。
(2)不能是“提交语句”或“回滚语句”。
(3) 遵循 SQL external repository interface(SQL/ERI)服务器要求的SQL支持度的测量规则。
SQL/CLI支持国际字符集处理、滚动游标和动态SQL等功能,以便完全与SQL标准兼容。此外,SQL/CLI还增加了一些“简练的”例程,以便与微软的ODBC、早期的SQL访问规范和X/Open规范兼容。需要说明的是,虽然在语法和语义上,SQL/CLI基本上与ODBC等价,但并不等于说SQL/CLI与ODBC用法完全相同。
由于实现技术方面的原因,一些基于SQL/CLI驱动程序的应用程序需作少量修改,才能移植到基于ODBC驱动程序的系统。
3. SQL/CLI例程的结构
SQL/CLI例程由一组函数即CLI函数组成,这些函数的功能、函数的说明(包括函数名、参数的个数、类型、顺序以及返回值的类型)等内容已由标准规定好,下面分别介绍这些函数。
(1)连接阶段的函数:AlloEnv:分配SQL环境;AlloStmt: 分配SQL语句;AlloHandle: 分配SQL资源;AlloConnect: 分配SQL连接; Connect: 创建连接。
(2)数据交换阶段的函数:在数据交换阶段,共需要用到四种类型的函数。①有关游标的函数:SetCursorName: 设置游标名; GetCursorName: 获取游标名;Fetch:推进游标并读取数据;ScrollFetch:在指定的行定位游标并读取数据: CloseCursor:关闭游标。②有关诊断的函数: GetDiagField: 从诊断区得到信息。③有关动态SQL的函数:SetDescField:在描述符区设置一个字段; GetDescField: 从描述符区获取一个字段; CopyDesc: 复制描述符。④有关数据获取的函数: ExecDirect: 直接执行语句;Prepare: 准备语句; Execute: 执行所准备的语句。在数据获取函数中,SQL语句以函数中的参数形式出现。此外,还包括执行事务的函数。EndTran: 终止一个SQL事务。一般来说,一个数据获取函数的执行即表示一个新事务的开始,而用函数EndTran表示事务的结束。
(3)断开连接阶段的函数: FreeStmt:取消分配的SQL语句;FreeHandle:释放SQL资源;FreeEnv:取消分配的SQL环境; FreeConnect: 取消分配的SQL连接; DisConnect: 断开连接。
4. SQL/CLI的工作过程
利用SQL/CLI进行编程需包括连接数据库、与数据库进行数据交换、断开连接等步骤。SQL/CLI的工作过程主要包括三个阶段:
(1)初始化环境变量:也即获取环境句柄和连接句柄,以便连接数据库,并进一步获取语句句柄。
(2)准备数据接收的缓冲区:再依次执行准备好的SQL语句,将语句句柄和数据缓冲区进行绑定。
(3)释放语句柄;与数据库断开连接,以及释放连接句柄和环境句柄。
可以使用一些辅助手段来组织上述过程,如将以上过程生成DLL,然后将数据库的初始化、绑定、释放三个过程函数化,并在相应的地方调用函数以简化编程过程和调试步骤,提高代码的重用率。