当前位置:天才代写 > tutorial > C语言/C++ 教程 > ODBC中的同步与异步执行模式

ODBC中的同步与异步执行模式

2017-11-05 08:00 星期日 所属: C语言/C++ 教程 浏览:719

1.引言

连年来,跟着计较机局域网技能的不绝成长,计较机体系布局已经成长到巨大而开放的客户机/处事器模式。对付客户机/处事器应用的开拓,此刻常用的前端开拓东西有:VisualBasic、Delphi、PowerBuilder等。它们可通过ODBC接口会见处事器的SQLServer数据库处事器。

VisualBasic、Delphi、PowerBuilder等开拓东西在利用ODBC2.0来编写措施时,凡是会提供三种要领来举办数据库应用措施的方案设计:

·利用数据节制项

·利用数据库工具变量举办编程

·直接挪用ODBC2.0API

在客户机/处事器模式下举办数据库应用措施设计时,仅用前两种要领往往是不足的。因为回收前两种要领,其执行模式对付措施员是透明的,而ODBC2.0会见数据库时存在同步与异步执行模式之分,故容易因设计不妥,产生系统死锁。因此,在实际编措施时,我们需要回收第三种要领来办来由同步和异步执行模式所造成的问题。

2.同步和异步执行模式

ODBC2.0会见数据库时,有同步执行模式与异步执行模式之分。

所谓同步执行模式,是指语句在同步执行模式下,将始终保持对措施流的节制,直至措施竣事。譬喻查询操纵,客户机上的应用措施在向处事器发出查询操纵的指令后,将一直期待处事器将查询功效返回客户机端后,才继承举办下一步操纵,如图1所示。

图1同步执行模式

所谓异步执行模式,是指语句在异步执行模式下,各语句执行竣事的顺序与语句执行开始的顺序并不必然沟通。譬喻查询操纵,客户机上的应用措施在向处事器发出了查询操纵的指令后,将立即执行查询语句的下一条语句,而不需要等随处事器将查询功效返回客户机端后,才继承举办下一步操纵。如图2所示。

图2异步执行模式

在一些应用措施开拓东西中,在其提供利用数据节制项和数据库工具变量举办编程的同时,并没有很好地思量到同步执行模式与异步执行模式的重要区别。为了使措施运行速度更快,其语句执行的缺省模式为异步模式。对付一般措施员来说,假如他对同步执行模式与异步执行模式不相识的话,他往往会在对处事器发出一个操纵语句(查询或读取一笔记录等操纵)后,立即引用处事器返回的执行功效,可能对该功效举办下一步操纵;在异步执行模式下,客户机上的后续语句是在该操纵语句发出后接着执行的,但由于各类原因,处事器不必然能执行完该操纵语句,并在后续语句执行前将功效返回客户机。因此,后续语句在引用前一操纵语句的执行功效时,往往会因为该执行功效并不存在而引用了错误的值,造成系统错误或死锁。

3.办理方案

办理上面所提到的问题,可以采纳以下两种方案:

①操作ODBC2.0API,将语句执行状态配置为同步执行模式。ODBC2.0API中,函数SQLSetStmtOption()的成果是配置同步或异步执行模式。我们可以回收以下语句,将语句执行状态配置为同步执行模式:

iRetCodeΚSQLSetStmtOption(hStmt,SQL-ASYNC-EN睞BLE,0)

个中,hStmt是一有效的语句句柄,常数SQL-ASYNC-ENABLE是所要配置的选项,参数0暗示该选项(即异步执行模式)封锁。假如iRetCode返回SQL-SUCCESS,则暗示语句执行状态已被配置为同步执行模式。

②操作ODBC2.0API,将语句执行状态配置为异步执行模式,然后在措施中不绝查询一个操纵语句是否已经执行完毕。

ODBC2.0API中共有20多个函数支持异步执行,如上页表所示。

这些函数第一次挪用后,将返回值SQL-STILL-EXE睠UTING,这时应用措施将继承执行后续语句。过了一段时间后,应该再次挪用原函数,并且要留意:实参数应传入与第一次挪用时沟通的语句句柄,其他参数也应一样(但会被忽略)。假如函数返回值为SQL-SUCCESS,则表白该语句已经执行完毕;假如函数返回SQL-STILL-EXECUTING,则表白该语句仍在执行中。

我们可以用一个简朴的例子说明如下:

iRetCodeΚSQLSetStmtOption(hStmt,SQL-ASYNC-ENABLE,1)
′置语句执行模式为异步执行模式
iRetCodeΚSQLExecDirect(hStmt,″SELECT*FROMemployees″,23)
......′执行其他操纵
iRetCodeΚSQLExecDirect(hStmt,″SELECT*FROMemployees″,23)
′判定SQLExecDirect()是否已执行完毕
If(iRetCodeΚSQL-STILL-EXECUTING)Then
......′该语句未执行完,继承执行其他操纵
Else
If(iRetCodeΚSQL-SUCCESS)Then
......′该语句已执行完,可对语句操纵功效举办处理惩罚
EndIf
EndIf

#p#分页标题#e#

同步执行模式可以简化措施体例的巨大性,对ODBC2.0API不十分熟悉的措施员,可以不消过多地相识较量巨大的ODBC2.0API,而只需利用数据节制项和数据库工具变量来编写应用措施,使开拓效率大大提高,但措施运行速度比不上异步执行模式的速度。

异步执行模式固然在编措施时十分巨大,但在这种模式下可以举办多任务并行执行,使执行效率大大提高。

我们在体例应用措施时,应按照自身的环境,对这两种模式的利用举办分别,以便既提高措施运行的安详靠得住性,又提高措施执行的效率。

 

    关键字:

天才代写-代写联系方式