本文討論了Visual Basic應用程序訪問SQL Server數(shù)據(jù)庫的幾種常用的方法,分別說明了每種方法的內部機理并給出了每種方法的一個簡單的實例,最后比較了每種方法性能和優(yōu)缺點。
一、引言
SQL Server是微軟推出的中小型網(wǎng)絡數(shù)據(jù)庫系統(tǒng),是目前最常用的數(shù)據(jù)庫系統(tǒng)之一。隨著SQL Server網(wǎng)絡數(shù)據(jù)庫應用程序日益增多,這種Web數(shù)據(jù)庫應用系統(tǒng)的正常運行一般依賴于已存在的用戶數(shù)據(jù)庫。創(chuàng)建維護數(shù)據(jù)庫的工作可用SQL Server提供的SQL EntERPrise Manager工具來進行,如能提供一種定制的數(shù)據(jù)庫管理工具,通過管理應用程序來管理數(shù)據(jù)庫及其設備,對用戶來說無疑是最理想的。
Visual Basic作為一種面向對象的可視化編程工具,具有簡單易學,靈活方便和易于擴充的特點。而且Microsoft為其提供了與SQL Server通信的API函數(shù)集及工具集,因此它越來越多地用作大型公司數(shù)據(jù)和客戶機—服務器應用程序的前端,與后端的Microsoft SQL Server相結合,VB能夠提供一個高性能的客戶機—服務器方案?! ?BR> 二、VB訪問SQL Server數(shù)據(jù)的常用方法
使用Visual Basic作為前端開發(fā)語言,與SQL Server接口有幾種常用的方法,即:
①數(shù)據(jù)訪問對象/Jet
②為ODBC API編程
③使用SQL Server的Visual Basic庫(VBSQL)為DB庫的API編程
④RDO 遠程數(shù)據(jù)對象(RemoteData Objects)
⑤ADO 數(shù)據(jù)對象(Active Data Objects)
1、數(shù)據(jù)訪問對象/Jet
VB支持Data Access Objects(DAOs)的子集。DAO的方法雖然不是性能的管理客戶機—服務器之間的對話方式,但它的確有許多優(yōu)點。DAO/Jet是為了實現(xiàn)從VB訪問Access數(shù)據(jù)庫而開發(fā)的程序接口對象。使用DAOs訪問SQL Server的過程如下:應用程序準備好語句并送至Jet,Jet引擎(MASJT200.DLL)優(yōu)化查詢,載入驅動程序管理器并與之通訊,驅動程序管理器(ODBC.DLL)通過調用驅動器(SQLSRVR.DLL)的函數(shù),實現(xiàn)連接到數(shù)據(jù)源,翻譯并向SQL Server提交SQL語句且返回結果。下面是一個用DAOs訪問SQL Server的VB實例?! ?BR> 注釋:Form Declarations
Dim mydb As Database
Dim mydynaset As Dynaset オ
Private Sub Form_Load()
Set mydb = OpenDatabase("", False, False, "ODBC; DSN=Myserver; WSID=LCL; DATABASE = sales")
Set mydynaset = mydb CreateDynaset("Select*from Customers") オ
End Sub ァ
上述例子是以非獨占、非只讀方式打開sales數(shù)據(jù)庫,并檢索Customers表中的所有字段。OpenDatabase函數(shù)的最后一個參數(shù)是ODBC連接字符串參數(shù),它指明了Microsoft Access連接到SQL Server所需要知道的一些內容。其中“DSN”為數(shù)據(jù)源名,“WSID”為工作站名,“DATABASE”為所要訪問的數(shù)據(jù)庫名。
2、利用ODBC API編程
ODBC(Open Database Connectivity)的思想是訪問異種數(shù)據(jù)庫的一種可移植的方式。與數(shù)據(jù)資源對話的公用函數(shù)組裝在一個稱為驅動程序管理器(ODBC.DLL)的動態(tài)連接中。應用程序調用驅動程序管理器中的函數(shù),而驅動程序管理器反過來通過驅動器(SQLSRVR.DLL)把它們送到服務器中。
下面的代碼使用上面一些函數(shù)先登錄到一個服務器數(shù)據(jù)庫,并為隨后的工作設置了語句句柄。
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 SQLAllocEnv(giHEnv)<>SQL_SUCCESS Then
MsgBox"Allocation couldn注釋:t happen!"
End If
If SQLAllocConnect(giHEnv,giHDB)<>SQL_SUCCESS Then
MsgBox "SQL Server couldn注釋:t connect!"
End If
myConnection="DSN=myServer;UID=LCL;PWD=;APP=ODBCTest;WSID=LCL;DATABASE=sales"
myResult=SQLDriverConnect(giHDB,Test,form1.hWnd,myConnection.len(myConnection),myBuff,256,myBufflen,SQL_DRIVER_COMPLETE_REQU IE D)
myResult=SQLAllocStmt(giHDS,giHStmt)
myResult=SQLFreeStmt(giHStmt,SQL_COLSE)
rsSQL="Select * from Customers Where City = "Hunan""
myResult = SQLExecDirect(giHStmt,rsSQL,Len(rsSQL))
一、引言
SQL Server是微軟推出的中小型網(wǎng)絡數(shù)據(jù)庫系統(tǒng),是目前最常用的數(shù)據(jù)庫系統(tǒng)之一。隨著SQL Server網(wǎng)絡數(shù)據(jù)庫應用程序日益增多,這種Web數(shù)據(jù)庫應用系統(tǒng)的正常運行一般依賴于已存在的用戶數(shù)據(jù)庫。創(chuàng)建維護數(shù)據(jù)庫的工作可用SQL Server提供的SQL EntERPrise Manager工具來進行,如能提供一種定制的數(shù)據(jù)庫管理工具,通過管理應用程序來管理數(shù)據(jù)庫及其設備,對用戶來說無疑是最理想的。
Visual Basic作為一種面向對象的可視化編程工具,具有簡單易學,靈活方便和易于擴充的特點。而且Microsoft為其提供了與SQL Server通信的API函數(shù)集及工具集,因此它越來越多地用作大型公司數(shù)據(jù)和客戶機—服務器應用程序的前端,與后端的Microsoft SQL Server相結合,VB能夠提供一個高性能的客戶機—服務器方案?! ?BR> 二、VB訪問SQL Server數(shù)據(jù)的常用方法
使用Visual Basic作為前端開發(fā)語言,與SQL Server接口有幾種常用的方法,即:
①數(shù)據(jù)訪問對象/Jet
②為ODBC API編程
③使用SQL Server的Visual Basic庫(VBSQL)為DB庫的API編程
④RDO 遠程數(shù)據(jù)對象(RemoteData Objects)
⑤ADO 數(shù)據(jù)對象(Active Data Objects)
1、數(shù)據(jù)訪問對象/Jet
VB支持Data Access Objects(DAOs)的子集。DAO的方法雖然不是性能的管理客戶機—服務器之間的對話方式,但它的確有許多優(yōu)點。DAO/Jet是為了實現(xiàn)從VB訪問Access數(shù)據(jù)庫而開發(fā)的程序接口對象。使用DAOs訪問SQL Server的過程如下:應用程序準備好語句并送至Jet,Jet引擎(MASJT200.DLL)優(yōu)化查詢,載入驅動程序管理器并與之通訊,驅動程序管理器(ODBC.DLL)通過調用驅動器(SQLSRVR.DLL)的函數(shù),實現(xiàn)連接到數(shù)據(jù)源,翻譯并向SQL Server提交SQL語句且返回結果。下面是一個用DAOs訪問SQL Server的VB實例?! ?BR> 注釋:Form Declarations
Dim mydb As Database
Dim mydynaset As Dynaset オ
Private Sub Form_Load()
Set mydb = OpenDatabase("", False, False, "ODBC; DSN=Myserver; WSID=LCL; DATABASE = sales")
Set mydynaset = mydb CreateDynaset("Select*from Customers") オ
End Sub ァ
上述例子是以非獨占、非只讀方式打開sales數(shù)據(jù)庫,并檢索Customers表中的所有字段。OpenDatabase函數(shù)的最后一個參數(shù)是ODBC連接字符串參數(shù),它指明了Microsoft Access連接到SQL Server所需要知道的一些內容。其中“DSN”為數(shù)據(jù)源名,“WSID”為工作站名,“DATABASE”為所要訪問的數(shù)據(jù)庫名。
2、利用ODBC API編程
ODBC(Open Database Connectivity)的思想是訪問異種數(shù)據(jù)庫的一種可移植的方式。與數(shù)據(jù)資源對話的公用函數(shù)組裝在一個稱為驅動程序管理器(ODBC.DLL)的動態(tài)連接中。應用程序調用驅動程序管理器中的函數(shù),而驅動程序管理器反過來通過驅動器(SQLSRVR.DLL)把它們送到服務器中。
下面的代碼使用上面一些函數(shù)先登錄到一個服務器數(shù)據(jù)庫,并為隨后的工作設置了語句句柄。
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 SQLAllocEnv(giHEnv)<>SQL_SUCCESS Then
MsgBox"Allocation couldn注釋:t happen!"
End If
If SQLAllocConnect(giHEnv,giHDB)<>SQL_SUCCESS Then
MsgBox "SQL Server couldn注釋:t connect!"
End If
myConnection="DSN=myServer;UID=LCL;PWD=;APP=ODBCTest;WSID=LCL;DATABASE=sales"
myResult=SQLDriverConnect(giHDB,Test,form1.hWnd,myConnection.len(myConnection),myBuff,256,myBufflen,SQL_DRIVER_COMPLETE_REQU IE D)
myResult=SQLAllocStmt(giHDS,giHStmt)
myResult=SQLFreeStmt(giHStmt,SQL_COLSE)
rsSQL="Select * from Customers Where City = "Hunan""
myResult = SQLExecDirect(giHStmt,rsSQL,Len(rsSQL))