www.黄片视频在线观看com,久久综合加勒比,久久精品视频91,伊人久久夜,欧美日韩国产一区二区三区欧,国产在线成人一区二区,成人网在线视频

當(dāng)前位置:首頁(yè) -> 焦點(diǎn)新聞

ODBC中的同步與異步執(zhí)行模式

2005/1/7 11:42:51       
 

 
    1.引言
    近年來(lái),隨著計(jì)算機(jī)局域網(wǎng)技術(shù)的不斷發(fā)展,計(jì)算機(jī)體系結(jié)構(gòu)已經(jīng)發(fā)展到復(fù)雜而開(kāi)放的客戶(hù)機(jī)/服務(wù)器模式。對(duì)于客戶(hù)機(jī)/服務(wù)器應(yīng)用的開(kāi)發(fā),現(xiàn)在常用的前端開(kāi)發(fā)工具有:VisualBasic、Delphi、PowerBuilder等。它們可通過(guò)ODBC接口訪問(wèn)服務(wù)器的SQLServer數(shù)據(jù)庫(kù)服務(wù)器。
    VisualBasic、Delphi、PowerBuilder等開(kāi)發(fā)工具在使用ODBC2.0來(lái)編寫(xiě)程序時(shí),通常會(huì)提供三種方法來(lái)進(jìn)行數(shù)據(jù)庫(kù)應(yīng)用程序的方案設(shè)計(jì):
    ·使用數(shù)據(jù)控制項(xiàng)
    ·使用數(shù)據(jù)庫(kù)對(duì)象變量進(jìn)行編程
    ·直接調(diào)用ODBC2.0API
    在客戶(hù)機(jī)/服務(wù)器模式下進(jìn)行數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)時(shí),僅用前兩種方法往往是不夠的。因?yàn)椴捎们皟煞N方法,其執(zhí)行模式對(duì)于程序員是透明的,而ODBC2.0訪問(wèn)數(shù)據(jù)庫(kù)時(shí)存在同步與異步執(zhí)行模式之分,故容易因設(shè)計(jì)不當(dāng),發(fā)生系統(tǒng)死鎖。因此,在實(shí)際編程序時(shí),我們需要采用第三種方法來(lái)解決由同步和異步執(zhí)行模式所造成的問(wèn)題。

    2.同步和異步執(zhí)行模式
    ODBC2.0訪問(wèn)數(shù)據(jù)庫(kù)時(shí),有同步執(zhí)行模式與異步執(zhí)行模式之分。
    所謂同步執(zhí)行模式,是指語(yǔ)句在同步執(zhí)行模式下,將始終保持對(duì)程序流的控制,直至程序結(jié)束。例如查詢(xún)操作,客戶(hù)機(jī)上的應(yīng)用程序在向服務(wù)器發(fā)出查詢(xún)操作的指令后,將一直等待服務(wù)器將查詢(xún)結(jié)果返回客戶(hù)機(jī)端后,才繼續(xù)進(jìn)行下一步操作,
    所謂異步執(zhí)行模式,是指語(yǔ)句在異步執(zhí)行模式下,各語(yǔ)句執(zhí)行結(jié)束的順序與語(yǔ)句執(zhí)行開(kāi)始的順序并不一定相同。例如查詢(xún)操作,客戶(hù)機(jī)上的應(yīng)用程序在向服務(wù)器發(fā)出了查詢(xún)操作的指令后,將立刻執(zhí)行查詢(xún)語(yǔ)句的下一條語(yǔ)句,而不需要等到服務(wù)器將查詢(xún)結(jié)果返回客戶(hù)機(jī)端后,才繼續(xù)進(jìn)行下一步操作。
    在一些應(yīng)用程序開(kāi)發(fā)工具中,在其提供使用數(shù)據(jù)控制項(xiàng)和數(shù)據(jù)庫(kù)對(duì)象變量進(jìn)行編程的同時(shí),并沒(méi)有很好地考慮到同步執(zhí)行模式與異步執(zhí)行模式的重要區(qū)別。為了使程序運(yùn)行速度更快,其語(yǔ)句執(zhí)行的缺省模式為異步模式。對(duì)于一般程序員來(lái)說(shuō),如果他對(duì)同步執(zhí)行模式與異步執(zhí)行模式不了解的話,他往往會(huì)在對(duì)服務(wù)器發(fā)出一個(gè)操作語(yǔ)句(查詢(xún)或讀取一條記錄等操作)后,立刻引用服務(wù)器返回的執(zhí)行結(jié)果,或者對(duì)該結(jié)果進(jìn)行下一步操作;在異步執(zhí)行模式下,客戶(hù)機(jī)上的后續(xù)語(yǔ)句是在該操作語(yǔ)句發(fā)出后接著執(zhí)行的,但由于各種原因,服務(wù)器不一定能執(zhí)行完該操作語(yǔ)句,并在后續(xù)語(yǔ)句執(zhí)行前將結(jié)果返回客戶(hù)機(jī)。因此,后續(xù)語(yǔ)句在引用前一操作語(yǔ)句的執(zhí)行結(jié)果時(shí),往往會(huì)因?yàn)樵搱?zhí)行結(jié)果并不存在而引用了錯(cuò)誤的值,造成系統(tǒng)錯(cuò)誤或死鎖。

    3.解決方案
    解決上面所提到的問(wèn)題,可以采取以下兩種方案:
    ①利用ODBC2.0API,將語(yǔ)句執(zhí)行狀態(tài)設(shè)置為同步執(zhí)行模式。ODBC2.0API中,函數(shù)SQLSetStmtOption()的功能是設(shè)置同步或異步執(zhí)行模式。我們可以采用以下語(yǔ)句,將語(yǔ)句執(zhí)行狀態(tài)設(shè)置為同步執(zhí)行模式:iRetCodeΚSQLSetStmtOption(hStmt,SQL-ASYNC-ENABLE,0)
    其中,hStmt是一有效的語(yǔ)句句柄,常數(shù)SQL-ASYNC-ENABLE是所要設(shè)置的選項(xiàng),參數(shù)0表示該選項(xiàng)(即異步執(zhí)行模式)關(guān)閉。如果iRetCode返回SQL-SUCCESS,則表示語(yǔ)句執(zhí)行狀態(tài)已被設(shè)置為同步執(zhí)行模式。
    ②利用ODBC2.0API,將語(yǔ)句執(zhí)行狀態(tài)設(shè)置為異步執(zhí)行模式,然后在程序中不斷查詢(xún)一個(gè)操作語(yǔ)句是否已經(jīng)執(zhí)行完畢。
    ODBC2.0API中共有20多個(gè)函數(shù)支持異步執(zhí)行,如上頁(yè)表所示。
    這些函數(shù)第一次調(diào)用后,將返回值SQL-STILL-EXECUTING,這時(shí)應(yīng)用程序?qū)⒗^續(xù)執(zhí)行后續(xù)語(yǔ)句。過(guò)了一段時(shí)間后,應(yīng)該再次調(diào)用原函數(shù),而且要注意:實(shí)參數(shù)應(yīng)傳入與第一次調(diào)用時(shí)相同的語(yǔ)句句柄,其他參數(shù)也應(yīng)一樣(但會(huì)被忽略)。如果函數(shù)返回值為SQL-SUCCESS,則表明該語(yǔ)句已經(jīng)執(zhí)行完畢;如果函數(shù)返回SQL-STILL-EXECUTING,則表明該語(yǔ)句仍在執(zhí)行中。
    我們可以用一個(gè)簡(jiǎn)單的例子說(shuō)明如下:
    iRetCodeΚSQLSetStmtOption(hStmt,SQL-ASYNC-ENABLE,1)
    ′置語(yǔ)句執(zhí)行模式為異步執(zhí)行模式
    iRetCodeΚSQLExecDirect(hStmt,″SELECT*FROMemployees″,23)
    ......′執(zhí)行其他操作
    iRetCodeΚSQLExecDirect(hStmt,″SELECT*FROMemployees″,23)
    ′判斷SQLExecDirect()是否已執(zhí)行完畢
    If(iRetCodeΚSQL-STILL-EXECUTING)Then
    ......′該語(yǔ)句未執(zhí)行完,繼續(xù)執(zhí)行其他操作
    Else
    If(iRetCodeΚSQL-SUCCESS)Then
    ......′該語(yǔ)句已執(zhí)行完,可對(duì)語(yǔ)句操作結(jié)果進(jìn)行處理
    EndIf
    EndIf
    同步執(zhí)行模式可以簡(jiǎn)化程序編制的復(fù)雜性,對(duì)ODBC2.0API不十分熟悉的程序員,可以不用過(guò)多地了解比較復(fù)雜的ODBC2.0API,而只需使用數(shù)據(jù)控制項(xiàng)和數(shù)據(jù)庫(kù)對(duì)象變量來(lái)編寫(xiě)應(yīng)用程序,使開(kāi)發(fā)效率大大提高,但程序運(yùn)行速度比不上異步執(zhí)行模式的速度。
    異步執(zhí)行模式雖然在編程序時(shí)十分復(fù)雜,但在這種模式下可以進(jìn)行多任務(wù)并行執(zhí)行,使執(zhí)行效率大大提高。
    我們?cè)诰幹茟?yīng)用程序時(shí),應(yīng)根據(jù)自身的情況,對(duì)這兩種模式的使用進(jìn)行劃分,以便既提高程序運(yùn)行的安全可靠性,又提高程序執(zhí)行的效率。

  

煤炭網(wǎng)版權(quán)與免責(zé)聲明:

凡本網(wǎng)注明"來(lái)源:煤炭網(wǎng)www.dysmaa.com "的所有文字、圖片和音視頻稿件,版權(quán)均為"煤炭網(wǎng)www.dysmaa.com "獨(dú)家所有,任何媒體、網(wǎng)站或個(gè)人在轉(zhuǎn)載使用時(shí)必須注明"來(lái)源:煤炭網(wǎng)www.dysmaa.com ",違反者本網(wǎng)將依法追究責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,是本著為讀者傳遞更多信息的目的,并不意味著本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載使用時(shí),必須保留本網(wǎng)注明的稿件來(lái)源,禁止擅自篡改稿件來(lái)源,并自負(fù)版權(quán)等法律責(zé)任。違反者本網(wǎng)也將依法追究責(zé)任。 如本網(wǎng)轉(zhuǎn)載稿件涉及版權(quán)等問(wèn)題,請(qǐng)作者在兩周內(nèi)盡快來(lái)電或來(lái)函聯(lián)系。

  • 用手機(jī)也能做煤炭生意啦!
  • 中煤遠(yuǎn)大:煤炭貿(mào)易也有了“支付寶”
  • 中煤開(kāi)啟煤炭出口貿(mào)易人民幣結(jié)算新時(shí)代
  • 下半年煤炭市場(chǎng)依然嚴(yán)峻
市場(chǎng)動(dòng)態(tài)

網(wǎng)站技術(shù)運(yùn)營(yíng):北京真石數(shù)字科技股份有限公司、喀什中煤遠(yuǎn)大供應(yīng)鏈管理有限公司、喀什煤網(wǎng)數(shù)字科技有限公司

總部地址:北京市豐臺(tái)區(qū)總部基地航豐路中航榮豐1層

京ICP備18023690號(hào)-1      京公網(wǎng)安備 11010602010109號(hào)


關(guān)注中煤遠(yuǎn)大微信
跟蹤最新行業(yè)資訊