国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

VB應用程序訪問SQLServer方法探討

2019-11-18 17:46:50
字體:
來源:轉載
供稿:網友
摘要

  本文討論了VisualBasic應用程序訪問SQLServer數據的幾中常用的方法,分別說明了每種方法的內部機理并給出了每種方法的一個簡單的實例,最后比較了每種方法的性能和優缺點。

引言

   MicrosoftVisualBasic(簡稱VB)作為一種面向對象的可視化編程工具,具有簡單易學的,靈活方便和易于擴充的特點。而且Microsoft為其提供了與SQLServer通信的API函數集及工具集。因此它越來越多地用作大型公司數據和客戶機—服務器應用程序的前端。與后端的MicrosoftSQLServer相結合,VB能夠提供一個魯棒的、高性能的客戶機—服務器方案。

使用VisualBasic作為前端開發語言,與SQLServer接口有三種常用的方法,即:
*數據訪問對象/Jet
*為ODBCAPI編程
*使用SQLServer的VisualBasic庫(VBSQL)為DB庫API編程
本文將討論這三種VB應用程序管理SQLServer數據的方法,并比較每種方法的性
能和優缺點。

方法1.數據訪問對象/JetVisualBasic支持DataaccessObjects(DAOs)的子集。DAO的方法雖然不是性能最好的管理客戶機—服務器之間的對話方式,但它確有許多優點。使用DAOs訪問SQLServer的過程如下:應用程序準備好語句并送至Jet,Jet引擎(MASJT200.DLL)優化查詢,載入驅動程序管理器并與之通訊,驅動程序管理器(ODBC.DLL)通地調用驅動器(SQLSRVR.DLL)的函數,實現連接到數據源,翻譯并向SQLServer提交SQL語句且返回結果。下面是一個用DAOs訪問SQLServer的VB實例。
'FormDeclarations
DimmydbAsDatabase
DimmydynasetAsDynaset
EndSub

上述例子是以非獨占、非只讀方式打開sales
數據庫,并檢索Customers表中的所有字段。OpenDatabase函數的最后一個參數是ODBC連接字符串參數,它指明了MicrosoftAccess連接到SQLServer所需要知道的一些內容。其中“DSN”為數據源名,“WSID”為工作站名,

“DATABASE”為所要訪問的數據庫名。

方法2.用ODBCAPI編程

  ODBC(OpenDatabaseConnectivity)的思想是訪問異種數據庫的一種可移植的方式。與數據資源對話的公用函數組裝在一個稱為驅動程序管理器(ODBC.DLL)的動態連接中。應用程序調用驅動程序管理器中的函數,而驅動程序管理器反過來通過驅動器反過來通來驅動器(SQLSRVR.DLL)把它們送到服務器中。
用ODBCAPI編程,一般要用到以下一些函數。下面列出了常用的函數以及它們的功能。
函數功能
SQLALLocEnv初始化ODBC環境,返回環境句柄
SQLALLocConnect為連接句柄分配內存并返回連接句柄
SQLConnect連接一個SQL數據資源
SQLDriverConnect連接一個SQL數據資源,允許驅動器向用戶詢問信息
SQLALLocStmt為語句句柄分配內存并返回語句句柄
SQLExecDirect把SQL語句送到服務器
SQLFetchAdvances到結果集的下一行(或第一行)
SQLGetData從結果集的特定的一列取回數據
SQLFreeStmt釋放與語句句柄相關的資源
SQLDisconnect切斷連接
SQLFreeConnect釋放與連接句柄相關的資源
SQLFreeEnv釋放與環境句柄相關的資源
下面的代碼使用上面一些函數先登錄到一個服務器數據庫,并為隨后的工作設置了語句
句柄。
G|oba|giHEnvAsLong
G|oba|giHDBAsLong
G|oba|giHStmtAsLong
DimmyResultAsinteger
DimmyConnectionAsSrting
DimmyBuffAsString*256
DimmyBufflenAsInteger
IfSQLA||ocEnv(giHEnv)<>SQL_SUCCESSThen
MsgBox"A||ocationcouldn'thappen!"
Endif
ifSQL||ocConnect(giHEnv,giHDB)<>SQL_SUCCESSThen
MsgBox"SQLServercouldn'tconnect!"
Endif
myConnection="DSN=myServer;UID=|c|;PWD=;APP=ODBCTest;WS|D=LCL;DATABASE=sales"
myResult=SQLDriverConnect(giHDB,Test,form1.hWnd,myConnection.len(myConnection),
myBuff,256,myBufflen,SQL_DRIVER_COMPLETE_REQUIED)
myResult=SQLA||ocStmt(giHDS,giHStmt)
myResult=SQLFreeStmt(giHStmt,SQL_COLSE)
rssQL="Select*fromCustomersWhereCity="Wuhan""
myResult=SQLExecDirect(giHStmt,rsSQL,Len(rsSQL))

方法3.使用VBSQL對DB庫API編程

  DB庫是SQLServer的本地API,SQLServer的VisualBasic庫(VBSQL)為VisualBasic程序員提供API。從一定意義上說,VBSQL是連接VisualBasic程序到SQLServer的性能最好最直接的方式。VBSQL包含以下三個文件:


VBSQL.VBX包含庫函數,具有訪問重要的消息和處理錯誤的能力
VBSQL.BI包括所有的常量和變量說明
VBSQL.HLPWindows幫助文件,使用VBSQL的指南
使用VBSQL時,必需將VBSQL.BI加入到VisualBasic工程文件中,并確保VB程序運行時有VBSQL.VBX文件。
一個典型的VBSQL對話中,一般要用到以下這些函數。
函數功能
Sq||nit在客戶機上裝載DB庫
Sq|OpenConnection打開服務器連接,返回連接句柄
Sq|Cmd在客戶機上建立批處理命令
Sq|Exec向服務器提交批處理命令
Sq|rexu|ts把客戶機定位在第一條(或下一條)結果集的開端
Sq|NextRow驅動每個結果集的行之間的循環
Sq|Data訪問一個特定列的數據
Sq|C|ose切斷特定的連接
Sq|Exit切斷所有找開的連接
Sq|WinExit卸下DB庫
一般的DB庫API編程的過程是這樣的:先通過調用SqlInit對DB庫進行初始化,再調用
SqlConnection打開一個連接,然后就可做一些工作。下面的代碼是一個初始化DB庫并
登錄到服務器的通用例程。
PrivateSub|nitia|izeApp|ication()
DBL|B-VERS|ON●=Sq||nit●()
|fDBL|B_VERS|ON●=""Then
MsgBox"Couldnotinitia|izeDBL|B!Exitapp|ication.",MB_|CONEXCLAMAT|ON
End
Endif
EndSub
PrivateFunctionLoginToServer()Asinteger
loginToServer=SUCCEED
Status=Sq|SetloginTime(loginTimeOut)
|fgiSq|Conn<>0Then
Sq|C|ose(giSq|Conn)'關閉已打開的連接
giSq|Conn=Sq|OpenConnection(gsServerName,gsLogin|D,gsPassWord,ProgramName●,ProgramName●)
|fgiSq|Conn<>oThen
|iresu|t=Sq|Use(giSq|Conn,"Sales")
Else
LogintoServer=FA|L
End|f
EndFunction

性能比較
  以上三種訪問SQLServer的方法各有各的特點。DAOs方法是基于對象的,因而便于使用,但是它從VisualBasic到SQLServer的最慢的方式。ODBCAPI和VBSQL方法從本質上講是基于程序的。ODBCAPI方法通用性好,允許最強的互操作性,編程簡單,但速度慢于VBSQL方法。VBSQL方法通過VBSQL控件,提供了重要的SQL`Server前端應用程序所需的靈活性、強大功能和良好性能。它具有真正的事件驅動及錯誤處理能力,完全支持異步處理、游標和計算列等。這些都是VBSQL方法超出其它方法的優勢,但其編程稍復雜。至于實際使用哪一種接口方式,在很大程度上依賴于用戶的應用程序的具體情況而定。->


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 金坛市| 元阳县| 张北县| 云南省| 常宁市| 广平县| 融水| 永济市| 潜江市| 临汾市| 嘉义市| 平度市| 海兴县| 神木县| 井冈山市| 桦川县| 湖南省| 铜梁县| 兰坪| 安国市| 衢州市| 山东| 永新县| 黄平县| 西昌市| 乐业县| 灵川县| 新绛县| 长宁县| 牙克石市| 蚌埠市| 平陆县| 康马县| 姚安县| 建瓯市| 长宁区| 郎溪县| 怀柔区| 柘城县| 同心县| 武宁县|