一级一区免费黄色,人人弄人人摸人人擦,亚洲黄色网站第二,欧美一区黄色网站

當前位置:首頁 -> 焦點新聞

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

2005/1/7 11:42:51       
 

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

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

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

  

煤炭網(wǎng)版權與免責聲明:

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

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

  • 用手機也能做煤炭生意啦!
  • 中煤遠大:煤炭貿(mào)易也有了“支付寶”
  • 中煤開啟煤炭出口貿(mào)易人民幣結算新時代
  • 下半年煤炭市場依然嚴峻
市場動態(tài)

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

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

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


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