<b>ODBC中的同步与异步履行情势</b>[VC/C++编程]
本文“<b>ODBC中的同步与异步履行情势</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
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?ABLE,0)
此中,hStmt是一有效的语句句柄,常数SQL-ASYNC-ENABLE是所要设置的选项,参数0表示该选项(即异步履行情势)关闭.假如iRetCode返回SQL-SUCCESS,则表示语句履行状况已被设置为同步履行情势.
②操纵ODBC2.0API,将语句履行状况设置为异步履行情势,然后在程序中不断查询一个操作语句能否已经履行完毕.
ODBC2.0API中共有20多个函数支持异步履行,如上页表所示.
这些函数第一次调用后,将返回值SQL-STILL-EXE?CUTING,这时利用程序将持续履行后续语句.过了一段时间后,应当再次调用原函数,并且要注意:实参数应传入与第一次调用时相同的语句句柄,其他参数也应一样(但会被忽视).假如函数返回值为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
同步履行情势可以简化程序编制的复杂性,对ODBC2.0API不非常熟习的程序员,可以不用过量地理解对比复杂的ODBC2.0API,而只需利用数据掌握项和数据库对象变量来编写利用程序,使开辟效率大大提高,但程序运行速度比不上异步履行情势的速度.
异步履行情势固然在编程序时非常复杂,但在这种情势下可以举行多任务并行履行,使履行效率大大提高.
我们在编制利用程序时,应按照自身的情形,对这两种情势的利用举行划分,以便既提高程序运行的安全坚固性,又提高程序履行的效率.
以上是“<b>ODBC中的同步与异步履行情势</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |