VB訪問SQLServer的探討

發表于:2007-07-14來源:作者:點擊數: 標簽:
摘要 本文討論了Visual Basic應用程序訪問SQL Server數據的幾中常用的方法,分別說明了每種方法的內部機理并給出了每種方法的一個簡單的實例,最后比較了每種方法的 性能 和優缺點。 引言 Microsoft Visual Basic(簡稱 VB )作為一種 面向對象 的可視化編程工
摘要

本文討論了Visual Basic應用程序訪問SQL Server數據的幾中常用的方法,分別說明了每種方法的內部機理并給出了每種方法的一個簡單的實例,最后比較了每種方法的

性能和優缺點。

引言

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

使用Visual Basic作為前端開發語言,與SQL Server接口有三種常用的方法,即:
*數據訪問對象/Jet?
*為ODBC API編程?
*使用SQL Server的Visual Basic庫(VBSQL)為DB庫API編程?
本文將討論這三種VB應用程序管理SQL Server數據的方法,并比較每種方法的性
能和優缺點。
?
方法1.數據訪問對象/JetVisual Basic支持Data Aclearcase/" target="_blank" >ccess Objects(DAOs)的子集。DAO的方法雖然不是性能最好的管理客戶機—服務器之間的對話方式,但它確有許多優點。使用DAOs訪問SQL Server的過程如下:應用程序準備好語句并送至Jet,Jet引擎(MASJT200.DLL)優化查詢,載入驅動程序管理器并與之通訊,驅動程序管理器(ODBC.DLL)通地調用驅動器(SQLSRVR.DLL)的函數,實現連接到數據源,翻譯并向SQL Server提交SQL語句且返回結果。下面是一個用DAOs訪問SQL Server的VB實例。

'Form Declarations?
Dim mydb As Database?
Dim mydynaset As Dynaset??
Private Sub Form_Load()?
Set mydb=OpenDatabase("",Fa|se,Fa|se,"ODBC;DSN=Myserver;WSID=LCL;DATABASE=sa|es")?
Set mydynaset=mydb CreateDynaset("Select*from Customers")??
End Sub?

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

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

方法2.用ODBC API編程?

ODBC(Open Database Connectivity)的思想是訪問異種數據庫的一種可移植的方式。與數據資源對話的公用函數組裝在一個稱為驅動程序管理器(ODBC.DLL)的動態連接中。應用程序調用驅動程序管理器中的函數,而驅動程序管理器反過來通過驅動器反過來通來驅動器(SQLSRVR.DLL)把它們送到服務器中。用ODBC API編程,一般要用到以下一些函數。下面列出了常用的函數以及它們的功能。
函數 功能?
SQLALLocEnv 初始化ODBC環境,返回環境句柄?
SQLALLocConnect 為連接句柄分配內存并返回連接句柄?
SQLConnect 連接一個SQL數據資源?
SQLDriverConnect 連接一個SQL數據資源,允許驅動器向用戶詢問信息
SQLALLocStmt 為語句句柄分配內存并返回語句句柄?
SQLExecDirect 把SQL語句送到服務器?
SQLFetchAdvances 到結果集的下一行(或第一行)?
SQLGetData 從結果集的特定的一列取回數據?
SQLFreeStmt 釋放與語句句柄相關的資源?
SQLDisconnect 切斷連接?
SQLFreeConnect 釋放與連接句柄相關的資源?
SQLFreeEnv 釋放與環境句柄相關的資源?
下面的代碼使用上面一些函數先登錄到一個服務器數據庫,并為隨后的工作設置了語句
句柄。?
Global giHEnv As Long?
Global giHDB As Long?
Global giHStmt As Long?
Dim myResult As integer?
Dim myConnection As Srting?
Dim myBuff As String*256
Dim myBufflen As Integer?
If SQLA||ocEnv(giHEnv)<>SQL_SUCCESS Then
MsgBox"A||ocation couldn't happen!"
End if
if SQL||ocConnect(giHEnv,giHDB)<>SQL_SUCCESS Then
MsgBox "SQL Server couldn't connect!"
End if
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*from Customers Where City="Wuhan""
myResult=SQLExecDirect(giHStmt,rsSQL,Len(rsSQL))

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

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

VBSQL.VBX 包含庫函數,具有訪問重要的消息和處理錯誤的能力?
VBSQL.BI 包括所有的常量和變量說明?
VBSQL.HLP Windows幫助文件,使用VBSQL的指南?
使用VBSQL時,必需將VBSQL.BI加入到Visual Basic工程文件中,并確保VB程序運行時有
VBSQL.VBX文件。?
一個典型的VBSQL對話中,一般要用到以下這些函數。?
函數 功能?
Sqllnit 在客戶機上裝載DB庫?
SqlOpenConnection 打開服務器連接,返回連接句柄?
SqlCmd 在客戶機上建立批處理命令?
SqlExec 向服務器提交批處理命令?
Sqlrexu|ts 把客戶機定位在第一條(或下一條)結果集的開端?
SqlNextRow 驅動每個結果集的行之間的循環?
SqlData 訪問一個特定列的數據?
SqlC|ose 切斷特定的連接?
SqlExit 切斷所有找開的連接?
SqlWinExit 卸下DB庫?
一般的DB庫API編程的過程是這樣的:先通過調用SqlInit對DB庫進行初始化,再調用
SqlConnection打開一個連接,然后就可做一些工作。下面的代碼是一個初始化DB庫并
登錄到服務器的通用例程。?
Private Sub |nitia|izeApp|ication()?
DBL|B-VERS|ON=Sq||nit()?
|f DBL|B_VERS|ON=""Then?
MsgBox"Could not initia|ize DBL|B!Exit app|ication.", MB_|CONEXCLAMAT|ON?
End?
End if?
End Sub?
Private Function LoginToServer() As integer?
loginToServer=SUCCEED?
Status%=Sq|SetloginTime%(loginTimeOut)?
|f giSq|Conn<>0 Then?
Sq|C|ose(giSq|Conn) '關閉已打開的連接?
giSq|Conn=Sq|OpenConnection(gsServerName,gsLogin|D,gsPassword,Progr amName,?ProgramName)?
|f giSq|Conn<>o Then?
|iresu|t=Sq|Use(giSq|Conn,"Sales")?
Else?
LogintoServer=FA|L?
End |f?
End Function?

性能比較?

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

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97