第15章 用ADO操作SQL Server數據庫_第1頁
第15章 用ADO操作SQL Server數據庫_第2頁
第15章 用ADO操作SQL Server數據庫_第3頁
第15章 用ADO操作SQL Server數據庫_第4頁
第15章 用ADO操作SQL Server數據庫_第5頁
已閱讀5頁,還剩65頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第15章用ADO操作SQLServer數據庫

Microsoft為程序員提供了許多訪問數據庫的編程接口,在應用程序中通過這些數據庫

訪問接口來操作數據庫。一方面,程序員可以使用各種開發工具如VB、VC++和Delphi等

開發應用程序,另一方面,在數據庫訪問接口中,ODBC是出現最早的一個,隨后,Microsoft

推出了一個獨立的數據庫引擎(Jet)和一套操作Jet的對象,即DataAccessObjects(數據訪問

對象,DAO)。由于DAO使用了Jet,因而其主要應用于面向桌面的應用,并且在此類應用

中有著最快的速度。為了容易地訪問遠程數據庫,Microsoft引入了RemoteDataObject(遠

程數據對象,RDO)o隨后,Microsoft又公布了UniversalDataAccess的統一對象模型來進

行信息訪問。該模型的核心部分是基于ActiveX技術的新的編程接口,即ActiveXData

Objects((ActiveX數據對象,ADO)。

ADO日益成熟,在遠程應用方面有著強大的功能,用以取代RDO。同時,在桌面應

用中也有取代DAO的趨勢。Microsoft己經宣布當前的DAO和RDO將是最終版本,今后

使用最多的將是ADO。另外,ADO也適用于寫分布式的多層應用程序。

本章主要討論使用VB開發工具進行ADO編程來操作SQLServer數據庫的方法。

15.1ODBC簡介

開放數據庫互聯(OpenDataBaseConnectivity,簡稱ODBC)是一個用于訪問數據的統一

界面標準。ODBC實際上是一個數據庫訪問庫,可以使應用程序直接操作數據庫中的數據,

具有數據庫的獨立性。作為開放式數據庫互聯的標準接口,用戶可以直接通過加載連接到

的數據庫的驅動程序來建立與各種數據庫的連接。使用ODBC可以訪問SQLServer.

Access、Oracle和Sybase等數據庫,而且可以訪問Excel電子表格以及ASCII數據文件等

非數據庫對象。需要說明的是,ODBC主要是為訪問關系型數據庫創建的。

ODBC通過驅動程序(Driver)提供了很好的數據庫獨立性,驅動程序與具體的數據庫有

關。使用ODBC開發的數據庫應用程序,如果想移植到其他的數據庫平臺上非常容易,主

要只是改變應用程序所用的ODBC數據庫驅動程序即可。使用ODBC進行數據庫開發大體

有以下幾個優點:

(1)ODBC的數據庫獨立性使得應用程序移植到其他的數據庫上變得非常容易,避免了

應用程序隨數據庫改變而改變的煩惱。

(2)使用ODBC可以縮短應用程序的開發時間。尤其是在開發客戶機/服務器結構的大

型數據庫應用,如果使用ODBC,則沒有必要將開發人員集中到客戶機/服務器結構的環境

下進行工作,完全可以先在單機上進行開發,然后通過對ODBC數據源配置的更改使得應

2SQLServer2000應用系統開發教程

用程序能夠在真正的應用程序工作環境下工作。這樣使得開發工作更加靈活,也提高了效

率。

(3)使用ODBC避免了應用程序對不同類型的數據庫使用不同的API。不同的數據庫

具有不同的API庫,而使用ODBC的應用程序可以只通過ODBC的API來進行數據庫訪

問,基本上不用數據庫自身的API,從而統一了訪問數據庫的接口。

15.1.1ODBC的結構

ODBC主要是通過使用驅動程序來提供數據庫獨立性的。驅動程序是ODBC的一個重

要組件,它是一個用以支持ODBCAPI函數調用的模塊,通常是一個DLL,并與具體的數

據庫有關。

另一個ODBC重要組件是驅動程序管理器(DriverManager),它負責ODBC應用程序中

的ODBC函數與DLL中函數之間的綁定(Binding),驅動程序管理器一般包含在ODBC.DLL

或ODBC32.DLL中,可以連接到所有的ODBC應用程序中。

ODBC的調用主要由4個層次組成(如圖15.1所示):

?第一層:ODBC應用程序,通過調用ODBC函數向數據庫發送SQL語句并處理

SQL返回結果。

?第二層:ODBC驅動程序管理器,負責管理和裝載驅動程序,其作用是用ODBC.INI

文件映像數據源名到特定的驅動程序;處理ODBC的初始化調用;為每個驅動程

序提供ODBC函數的入口點;對ODBC的調用參數和順序進行檢查。

?第三層:ODBC驅動程序,處理ODBC函數調用,提交SQL請求給特定的數據源

并返回結構給應用程序。

?第四層:數據源,數據源就是要存取的數據、相關的操作系統、數據庫管理系統、

網絡系統。

15.1.2ODBC數據源的創建

在介紹了ODBC之后,下面就來為本書中的數據庫應用程序項目創建一個ODBC數據

源。

在Windows98/NT/2000下,ODBC數據源管理器位于Windows的控制面板中。下面

以在Windows98中創建SchoolDBS數據源為例,說明創建ODBS數據源的一般操作步驟

如下:

(1)選擇Windows98中“開始|設置|控制面板”命令,出現如圖15.2所示的界面。

(2)雙擊該目錄下的“ODBC數據源(32位)”,開始進行ODBC的配置。首先打開的對

話框是“ODBC數據源管理器”對話框,如圖15.3所示。

頁面上的“用戶DSN”、“系統DSN”和“文件DSN”用來創建ODBC數據源。其中,

DSN是DataSourceName的縮寫。創建一個用戶DSN和創建一個系統DSN的過程完全一

樣,所不同的是創建“用戶DSN”之后,該數據源僅僅為創建該數據源的用戶所用,對于

操作系統的其他用戶而言,該數據源不可用;“系統DSN”對于整個操作系統的用戶而言

都是可用的;“文件DSN”是文件數據源,它把數據源信息保存到一個文件中。最常用到

的是“用戶DSN”和“系統DSN”。這里以“系統DSN”來創建ODBC數據源,因此,單

擊”系統DSN”選項卡,出現如圖15.4所示的界面,其中列出的各種數據源是以前建立的。

圖15.1ODBC四層結構示意圖

圖15.2“控制面板”界面

4SQLServer2000應用系統開發教程

圖15.3ODBC數據源管理器

圖15.4"系統DSN”選項卡

(3)在“ODBC數據源管理器”對話框中可以通過“添加”、“冊瞬”和“配置”按

鈕執行創建數據源、刪除數據源和修改數據源配置的操作。單擊“添加”按鈕后,出現如

圖15.5所示的對話框。

(4)選擇SQLServer驅動之后,單擊“完成”按鈕,將出現“創建到SQLServer的新

數據源”對話框,如圖15.6所示。在15.6所示的對一話框中,需要輸入ODBC數據源的

名稱和SQLServer服務器的名稱。這里,ODBC名稱設置為SchoolDBS,服務器組合框中

可以輸入安裝SQLServer并提供數據庫服務的機器名,在此處輸入本機名稱NO1,也可以

通過下拉列表來選擇服務器名稱。選擇遠程的計算機名稱,即配置一個遠程的ODBC數據

源。"Description”(描述和說明)文本框可以不進行輸入。

創建新數據源E3

選擇您想為其安裝數據源的驅動程序6):

名稱|版本▲]

MicrosoftdBaseDriver(*.dbf)4.00.

MicrosoftdBaseVFPDriver(*.dbf)6.00.

MicrosoftExcelDriver(*.xls)4.00.

MicrosoftFoxProDriver(*.dbf)4.00.

MicrosoftFoxProVFPDriver(*.dbf)6.00.

MicrosoftODBCforOracle2.573

MicrosoftParadoxDriver(*.db)4.00.

MicrosoftTextDriver(*.txt;*.csv)4.00.

MicrosoftYisualFoxProDriver6.00..

碰理磔2000.

11

|完成|取消

圖15.5”創建新數據源”對話框

(5)單擊“下一步”按鈕,此時會出現連接SQLServer認證的輸入框,如圖15.7所示。

(6)系統提供了兩種驗證登錄ID真偽的方式,分別是“使用網絡登錄ID和WindowsNT

驗證”和“使用用戶輸入登錄ID和密碼的SQLServer驗證”。在此選擇后者,正確輸入

登錄SQLServer的ID和密碼,這里的登錄ID為sa,沒有密碼,輸入完畢后,單擊“下一

步”按鈕,進入選擇數據庫的對話框,如圖15.8所示。

(7)選中“更改默認的數據庫為"復選框,從組合框中選擇數據庫為School,不更改

其他默認設置,填寫完畢后,單擊“下一步”按鈕,進入設置ODBC對話框,如圖15.9

所示。

圖15.6“創建到SQLServer的新數據源”對話框

6SQLServer2000應用系統開發教程

圖15.7"連接SQLServer”的身份認證對話框

圖15.8數據選擇對話框

圖15.9ODBC設置對話框

(8)在該對話框,保持默認選項,單擊“完成”按鈕,將彈出ODBC配置的確認對話

框,如圖15.10所示。在圖15.10中,單擊“測試數據源”按鈕,即彈出一個“測試結果”

對話框,用以顯示該ODBC數據源是否連接數據庫成功。這里的“測試結果”對話框如圖

15.10所示,表示測試成功。單擊“OK"(確定)按鈕返回到圖15.10。

(9)在圖15.10中,單擊“OK"(確定)按鈕返回,此時出現圖15.12所示的“系統DSN”

選項卡,與圖15.4對比,看到新建的SchoolDBS數據源。最后單擊“確定”按鈕,完成整

個基于ODBC的數據庫的連接。

|ODBCMicrosoftSQLServerSetup

AnewODBCdatasourcewillbecreatedwiththefollowing

configuration:

MicrosoftSQLServerODBCDriverVersion03.80.0194

DataSourceName:SchoolDBS

DataSourceDescription:

Server:N01

Database:school

Language:(Default)

TranslateCharacterData:Yes

LogLongRunningQueries:No

LogDriverStatistics:No

UseIntegratedSecurity:No

UseRegionalSettings:No

PreparedStatementsOption:Droptemporaryprocedureson

disconnect

UseFailoverServer:No

UseANSIQuotedIdentifiers:Yes

UseANSINull,PaddingsandWarnings:Yes

DataEncryption:NojdI

代工estDataSource…]OKICancelI

圖15.10ODBC配置測試結果提示框

圖15.11“測試結果”對話框

8SQLServer2000應用系統開發教程

圖15.12”系統DSN”選項卡

至此,ODBC的簡單介紹就結束了,在下面的ADO編程中,將會講述如何在ADO編

程中使用ODBC數據源來連接數據庫。

15.2ADO

Microsoft的ADO是用于訪問信息的APL這個接口通過一個稱為供應商(Provider)的

特定供應商的OLEDB驅動程序來訪問。OLEDB能夠訪問關系數據庫和非關系數據源;

另外,Microsoft為ODBC提供了一種OLEDB供應器,使得用戶可以使用ADO來編程訪

問ODBC數據源。

在VB中使用ADO有兩種連接數據的方法,一種是通過ADO控件,另外一種則是通

過編寫代碼來完成與數據庫的連接。筆者比較喜歡手工編寫代碼的方式,因為其比較靈活,

而且這些連接數據庫的方法非常容易做成通用的函數或過程來使用。

下面將首先介紹ADO的屬性、方法、事件以及利用它們編寫代碼的方法,隨后將簡

要地講述如何使用ADO控件。

15.2.1ADO的模型結構

ADO中包含了一系列的對象和集合。另外,ADO2.0以后,ADO模型結構中引入了

事件概念,事件(Events)是將要發生或已經發生的操作的通知。一般來說,用戶可以把事件

有效地編入包含幾個異步任務的應用程序中。

ADO數據對象的模型結構如圖15.13所示。ADO對象的列表如表15.1所示,ADO集

合的列表如表15.2所示。

表15.1ADO對象

對象說明

Command命令對象,嵌入一條SQL,用來執行一個操作

Connection鏈接對象,提供與數據庫的連接信道,允許數據交換

ErrorADO產生的錯誤對象

Field字段,記錄集對象中的一列

ParameterSQL語句中的參數

Property屬性對象,代表ADO對象的某一特性

RecordSet允許數據瀏覽和處理,記錄集對象

Record代表一行,該行可能來自RecordSet,也可能來自結構化的數據提供者,還可

能來自非結構化的數據提供者(比如,一個文件)

表15.2ADO集合

耒口說明

Errors為所有ADO產生的錯誤建立的對象集合

Parameters與Command對象關聯的所有Parameter對象的集合

Fields與RecordSet對象關聯的所有字段(Field)對象的集合

Properties與Connection>Command、RecordSet或Field對象關聯的所有屬性Property

對象的集合

ADO編程結構描述了使用ADO對象進行編程所必須的幾個重要步驟,并描述了每個

步驟中起主要角色的對象。ADO的目標是訪問、編輯和更新數據源,為完成此目標必需的

幾個步驟如下:

(1)連接到數據源(Connection對象),并可以有選擇地開始一個事務(Transaction)。

(2)可以選擇創建對象來執行SQL命令(Command對象)。

(3)可以選擇在SQL命令中指定列、表和值作為變量參數(Parameter對象)。

(4)執行命令(Command對象、Connection對象或RecordSet對象)。

(5)如果命令產生按行返回的記錄集,則將行存儲在緩存中(RecordSet對象)。

(6)可以選擇創建緩存視圖,對數據進行排序、篩選和定位(RecordSet對象)。

(7)通過添加、刪除或更改行和列編輯數據(RecordSet對象)。

(8)在適當情況下,通過在緩存中更改內容來更新數據源(RecordSet對象)。

(9)如果使用了事務(Transaction),可以接受或拒絕在完成事務期間所作的更改。結束

事務(Connection對象)。

ADO中的各個對象包含了大量的屬性、方法和事件,這些屬性、方法和事件在ADO

的編程中有著重要的作用。下面分小節對一些在編程中比較常用的和比較重要的屬性、方

法進行講述。

10SQLServer2000應用系統開發教程

圖15.13ADO的模型結構圖

15.2.2ADO中的Connection對象

本小節介紹Connection對象的常用屬性、方法和事件。

1.Connection對象的常用屬性

Connection對象是ADO對象模型的頂層對象,表示與數據源的鏈接。通常,要先建立

與數據源的連接,然后對Connection對象發出命令,從數據庫中取得所要的記錄或更新數

據庫。但也可以在請求RecordSet對象時建立連接。下面介紹Connection對象的常用屬性。

(1)Attributes

該屬性是一個Long型數據值。設置或返回Connection對象的特性。并非所有的數據

提供者都支持這種屬性。它可取兩個值,參見表15.3所示。

表15.3Attribute屬性的取值

常量說明

adXactCommitRectaining執行保留的提交,即通過自動調用CommitTrans啟動新事務。并非所有的數

據提供者都支持這種屬性。

adXactAbortRetaining執行保留的中止,即通過自動調用RollbackTrans啟動新事務。并非所有的數

據提供者都支持這種屬性。

(2)CommandTimeOut屬性

該屬性作用于Connection對象和Command對象。該屬性表示在終止一個命令的執行

并產生一個錯誤之前的以秒計的等待時間,默認值為30。如果設置為0,ADO將會無限等

待直到執行完成。

(3)ConnectionString屬性

連接數據庫的字符串,該屬性包含用于建立一個到數據源的連接的信息,這個信息包

含在詳細的連接字符串中,該字符串包含一系列由分號分割的argument=value語句。ADO

支持Connectionstring屬性的4個參數,其他參數不經過ADO處理直接傳到供應器中。

Connectionstring屬性在連接關閉時是可讀寫的,在連接打開時是只讀的。表15.4列出

了ConnectionString屬性的成分。

表15.4Connectionstring屬性的成分

成分說明

Provider=指定連接所用的供應器的名稱

FileName=指定包含預設連接信息的特定供應器的文件名

RemoteProvider=指定打開客戶端連接(只適用于遠程數據服務)時使用的供應器的名稱

RemoteServer二指定打開客戶端連接(只適用于遠程數據服務)時使用的服務器的路徑名

任何一個要訪問數據庫的ADO對象都必須先打開數據庫,ADO連接數據庫的兩種方

1)通過DSN建立連接

利用前面介紹利用的方法設置好DSN后,通過ADO的Connection對象實現數據庫的

連接。一個DSN連接通常需要的參數有:DSN數據源名稱、用戶名和口令(或登錄密碼)。

其使用格式如下:

ConnectionString=''DSN=數據源名稱;U1D=用戶名;PWD=口令"

其中,各參數的含義如下:

?DSN指出數據源名稱。

?UID指出登錄數據庫的用戶名,也可以使用UserID指出用戶名。

?PWD指出登錄數據庫的口令,也可以使用Password指出口令。

【例15.1]假設DSN數據源名稱為“SchoolDBS”,用戶名為“licb”,口令為“640219”,

則建立連接并返回一個記錄集的代碼如下:

'聲明并初始化一個ADO的Connection對象

12SQLServer2000應用系統開發教程

SetConn=NewADODB.Connection

*設置Connection對象的Connectionstring屬性

Conn.Connectionstring=nDSN=SchoolDBS;UID=licb;PWD=640219n

1使用Connection對象的Open方法連接數據庫

Conn.Open

,利用Connection對象的Excute方法返回數據庫的特定記錄集

SetRs=Conn.Execute("select*fromstudentwhereclass=*95031,")

也可以使用以下等價的代碼:

,聲明并初始化一個ADO的Connection對象

SetConn=NewADODB.Connection

,使用Connection對象的Open方法連接數據庫

Conn.OpenHDSN=SchoolDBS;UID=licb;PWD=640219"

,利用Connection對象的Excute方法返回數據庫的特定記錄集

SetRs=Conn.Execute("select*fromstudentwhereclass=*95031,")

注意:在VB中,上述代碼引用了一些ActiveX控件等,在設計時應選擇“工

程”菜單中的“引用”項,從引用列表中選中如下項:

0VBForApplications

0VBruntimeobjectsandprocedures

0VBobjectsandprocedures

0OLEAutomation

0MicrosoftActiveXDataObject2.6Library

2)直接使用數據庫文件名稱或數據源名稱建立連接

直接使用數據庫的文件名(比如Access、Paradox.FoxPro的數據庫文件)或者數據源名

(例如SQLServer的數據庫),也可建立數據庫的連接。其使用格式如下:

ConnectionString=nProvider=Mffi>^^;DSN=f[?j!M^^;

DR工VER=3區動程序名稱;艮務器名稱;DATABASE=數據庫名稱;

U工口=用戶名;PWD=口令”

其中各參數的含義如下:

?Provider:數據提供者,默認為MSDASQL,為微軟OLEDB,通常省略。

?DSN:要打開的數據庫對應的OBDC數據源,是可選參數。

?DRIVER:要打開的數據庫所用的驅動程序名稱。例如,Access對應的驅動程序為

MicrosoftAccessDriver(*.mdb),而SQLServer2000對應的驅動程序為SQL

Servero是可選參數。

?SERVER:要打開的數據庫所在的服務器名稱,本機可用(local),是可選參數。

?DATABASE:要打開的數據庫名稱,是可選參數。

?UID:用戶名,用來訪問數據庫,是可選參數。

?PWD:用戶口令或密碼,用來訪問數據庫,是可選參數。

以上參數均為可選參數,但必須提供足夠的信息來描述一個系統數據源。

注意:不使用ODBC中的DSN的連接方法也非常有用,而且對于遠程數據

庫應用系統、瀏覽器/服務器(B/S)結構的應用程序而言,這種連接方法更為靈

活、更加常用。

【例15.2】要建立到school數據庫的連接并返回一個記錄集,采用ADO中不需要

ODBC設置的連接方式(用戶名為“licb”,口令為“640219”),對應的代碼如下:

,聲明并初始化一個ADO的Connection對象

SetConn=NewADODB.Connection

,使用Connection對象的Connectionstring屬性,直接指定需要連接的SQLServer數據庫

Conn.Connectionstring="Provider=MSDASQL;DRIVER={SQLServer};”+_

"SERVER=NOl;UID=licb;PWD=640219;DATABASE=school”

,使用Connection對象的Open方法連接數據庫

Conn.Open

,利用Connection對象的Excute方法返回數據庫的特定記錄集

SetRs=Conn.Execute("select*fromstudentwhereclass=*95031,n)

也可以使用以下等價的代碼:

,聲明并初始化一個ADO的Connection對象

SetConn=NewADODB.Connection

,使用Connection對象的Open方法連接數據庫,直接指定需要連接的SQLServer數據庫

Conn.OpennProvider=MSDASQL;DRIVER={SQLServer};”+_

nSERVER=NOl;UID=licb;PWD=640219;DATABASE=schooln

,利用Connection對象的Excute方法返回數據庫的特定記錄集

SetRs=Conn.Execute("select*fromstudentwhereclass=*95031*n)

(4)ConnectionTimeout屬性

該屬性是一個Long型數據值。指示在終止嘗試和產生錯誤前建立連接期間所等待的秒

數。默認值為15秒。

(5)CursorLocation屬性

這個屬性是Connection對象和RecordSet對象都具有的。該屬性用來指定光標引擎的

位置。該屬性對于連接都是可讀寫的;對于關閉的記錄集而言是可讀寫的;對于打開的記

錄集是只讀的(注意,到后面的RecordSet處將不再重復講述該屬性)。

14SQLServer2000應用系統開發教程

該屬性可以設置或返回為表15.5所示的某個常量(長整型值)。

表15.5CursorLocation可設置的值

常量說明

adUseNone沒有使用游標服務(該常量己過時并且只為了向后兼容才出現)

adUseClient使用由本地游標庫提供的客戶端游標。本地游標服務通常允許使用的許多功能可能是驅

動程序提供的游標無法使用的,因此使用該設置對于那些將要啟用的功能是有好處的。

adUseClient具有向后兼容性,也支持同義的adUseClientBatch

adUseServer默認值。使用數據提供者的或驅動程序提供的游標。這些游標有時非常靈活,對于其他

用戶對數據源所作的更改具有額外的敏感性。但是,MicrosoftClientCursorProvider(如

己斷開關聯的記錄集)的某些功能無法由服務器端游標模擬,通過該設置將無法使用這

些功能

當CursorLocation用于客戶端RecordSet(ADOR)或Connection對象時,只能將其設置

為adUseCliento

(6)DefauItDatabase屬性

一個字符串。包含Connection對象的默認數據庫名稱。

(7)Mode屬性

一個Long型數據值。指示可以獲得的數據修改權限。其取值如表15.6所示。

表15.6Mode屬性的取值

常量說明

adModeUnknown默認值。表明權限尚未設置或無法確定

adModeRead表明權限為只讀

adModeWrite表明權限為只寫

adModeReadWrite表明權限為讀/寫

adModeShareDenyRead防止其他用戶使用讀權限打開連接

adModeShareDenyWrite防止其他用戶使用寫權限打開連接

adModeSharcExclusive防止其他用戶打開連接

adModeShareDenyNone防止其他用戶使用任何權限打開連接

(8)State屬性

該屬性是一個Long型數據值。描述Connection對象的當前狀態。該屬性可以設置為

如表15.7所示的常量。

表15.7State屬性所能取的常量值

常量說明

adStateClosed對象關閉(默認值)

adStateOpen對象打開

adStateConnection對象正在連接

adStateExecuting對象正在執行一個命令

adStateFetchingRecordSet對象正在獲取所需的行

2.Connection對象的常用方法

Connection對象的常用方法如下。

(1)BeginTrans、CommitTrans和RoIIbackTrans方法

這3個方法用于處理事務。BeginTrans啟動一個新事務;CommitTrans保存發生的任

何變化并結束當前事務,它也可能啟動一個新事務(當Connection的Attributes屬性設置為

adXactCommitRetaining時,提供者在調用該方法后啟動一個新的事務);RollBackTrans方

法取消當前事務所做的任何變化并結束該事務,它也可能啟動一個新事務(當Connection的

Attributes屬性設置為adXactAbortRetaining時,提供者在調用該方法后啟動一個新的事務)。

它們的使用格式如下:

connection對象.BeginTrans

connection對象.CommitTrans

connection對象.RollbackTrans

注意:并非所有的提供者都支持事務。另外,對于支持嵌套事務的提供者,

在一個打開的事務中調用BeginTrans方法會打開一個新的嵌套事務,返回值

能表明嵌套級別。如果是1,則表示打開了一個頂級事務。CommitTrans方法

和RollBackTrans方法只影響最近打開的事務;要想處理更高級的事務,需要

先關閉或取消當前的事務。

調用BeginTrans方法后,提供者將不會處理任何改變,直到調用CommitTrans方法(此

時,保存所有改變)或RollBackTrans方法(此時,取消所有改變)。

注意:處理事務時,連接對象必須是服務器端的連接對象,而不能是客戶端

對象。此時,需要設置Connection對象的CursorLocation屬性為adUseServer。

有關使用這三個方法的例子參見后面的例15.5。

(2)CanceI方法

該方法終止一項由Execute或Open方法啟動的異步任務。如果想要終止的方法不是異

步的,那么Cancel將會返回一個運行時錯誤。其使用語句如下:

Connection對象.Cancel

(3)CIose方法

該方法用于用于關閉與數據提供者之間的連接。關閉對象并不會把該對象從內存中清

16SQLServer2000應用系統開發教程

除,以后還可以被打開(可能是在改變了對象的某些屬性設置以后再打開)。要從內存中清

除對象需要將其設置為Nothing?Close方法的使用語句如下:

Connection對象.Close

(4)Execute方法

該方法用于執行指定的查詢、SQL語句或存儲過程,返回一個RecordSet對象。該方

法也是Command對象的一個方法。Execute的語法如下:

對于不按行返回的命令字符串:

Connection對象.ExecuteCommandText,RecordsAffected,Options

對于按行返回的命令字符串:

SetRecordSet=Connection對象.Execute(CommandText,RecordsAffected,Options)

其中,各參數的含義如下:

?CommandText一個命令字符串,其中包含SQL語句、存儲過程、表名或者其他

數據提供者所定義的將要被執行的命令。

?RecordsAffected將會隨機返回一個帶有受該命令影響的記錄個數的Long值

?Options是一個可選參數,長整數值,指示提供者應如何為CommandText參數賦

值,表15.8列出了該參數的取值。

表15.8Execute方法的Options參數的取值

常量說明

adCmdText指明CommandText的值是一個SQL命令

adCmdTable指明ConunandText的值是一個數據庫表名

adCmdTableDirect指明CommandText的值是一個數據庫表名,僅僅在RecordSet.open或requery的

時候使用。如果使用seek方法,那么必須確保RecordSet是以adCmdTableDirect

的方式打開的

adCmdStoredProc指明CommandText的值是一個存儲過程

Execute方法用來執行CommandText(對于Command對象而言,是CommandText屬性;

對于Connection對象而言是命令文本參數)指定的查詢。如果該查詢不是按行返回的查詢,

那么該操作將返回一個關閉的RecordSet對象,作用于數據庫之上;如果按行返回查詢,

那么將返回一個打開的RecordSet對象,該記錄集總有一個只讀的向前光標(后面將會講述

光標的概念)。

(5)Open方法

該方法用來建立一個與數據源的物理連接,其使用語法如下:

connection對象.OpenConnectionstring,UserID,Password,Options

其中,各參數的含義如下:

?Connectionstring是一個字符串,包含與連接字符串屬性中相同的連接信息。

?UserID指出連接到數據庫的用戶名。

?Password指出口令。

?Options是可選參數,其取值參見表15.9o

表15.9Open方法的Options參數的取值

常量說明

adAsyncConnect異步打開連接。當連接可用時,ConnectComplete事件將被觸發

adConnectUnspecified同步打開連接(默認)

說明:這些參數都是可選的。如果在Connection對象的ConnectionString屬

性中設置好了UserID和Password,那么上面的UserID>Password和Options

等三個參數都可以不寫。

3.Connection對象的常用事件

當連接事務開始被提交或被回退;或當命令執行時及連接開始或結束時,Connection

事件發生。

事件由事件句柄例程處理,這些例程在某個操作開始前或該操作結束后被調用。其中,

有一些成對出現的事件,成對的事件中,在操作開始前被調用的事件帶有前綴Will-,而操

作結束后的事件則帶有后綴-Complete。其余不成對的事件名沒有特定的形式。

Connection對象的常用事件如下:

(1)BeginTransCompIete>CommitTransCompIete和RoIIbackTransCompIete事件

BeginTransComplete事件在BeginTrans方法已經以異步方式運行完成時被調用。

CommitTransComplete事件在CommitTrans方法已經以異步方式運行完成時被調用。

RollbackTransComplete事件在RollbackTrans方法已經以異步方式運行完成時被調用。

BeginTransComplete>CommitTransComplete和RollbackTransComplete三個事件是在

Connection對象的關聯操作執行完成后被調用的。其使用語法如下:

BeginTransCompleteTransactionLevel,pError,adStatus,pConnection

CommitTransCompletepError,adStatus,pConnection

RollbackTransCompletepError,adStatus,pConnection

其中,各參數的含義如下:

?TransactionLevel是一個長整型值,包含引發該事件的BeginTrans的新事務級別。

?pError是一個Error對象,說明當EventstatusEnum的值為adStatusErrorsOccurred

時發生的錯誤,否則將不對它進行設置。

?adStatus是一個狀態值,其取值如15.10所示。調用這些事件中的任何一種事件

18SQLServer2000應用系統開發教程

時,如果引發事件的操作成功,則該參數設置為adStatusOK,如果操作失敗,則

設置為adStatusErrorsOccurred。通過在事件返回前將該參數設置為

adStatusUnwantedEvent,這些事件可以避免后續的通知。

?pConnection發生該事件所關聯的Connection對象。

表15.10adStatus的取值

常量說明

adStatusOK順利完成該項操作

adStatusErrorsOccured該項操作失敗,錯誤信息在pError中

adStatusCantDeny該操作不能要求取消當前操作

adStatusCancel該操作要求取消當前操作

adStatusUnwantedEvent設置為此值可防止觸發后續事件

(2)ConnectionCompIete和Disconnect事件

ConnectComplete和Disconnect兩事件分別在連接開始后、連接結束后調用。它們的使

用語法如下:

ConnectCompletepError,adStatus,pConnection

DisconnectadStatus,pConnection

其中,各參數的含義如下:

?pError是一個Error對象。它表示當adStatus的值為adStatusErrorsOccurred時發

生的錯誤,否則將不對它進行設置。

?adStatus為EventStatusEnum狀態值,其取值參見表15.10。調用某個此類事件時,

如果引發事件的操作成功,則該參數設置為adStatusOK,如果操作失敗,則設置

為adStatusErrorsOccurredo當調用ConnectComplete時,如果WillConnect方法已

經請求了取消掛起的連接,那么該參數設置為adStatusCancel。在返回任何事件之

前,將該參數設置為adStatusUnwantedEvent以避免后續通知。

?pConnection對于ConnectComplete事件,pConnection參數是與Connect方法相

關聯的Connection對象的一個引用對象。對于Disconnect事件,pConnection是與

CommitTrans方法相關聯的Connection對象的一個引用對象。

(3)ExecuteCompIete事件

該事件在Execute方法已經以異步方式運行完成時被調用。其使用語法如下:

ExecuteCompleteRecordsAffected,pError,adStatus,pCommand,

pRecordSet,pConnection

其中,各參數的含義如下:

?RecordsAffected是一個長整型值,包含命令所影響的記錄數目。

?pError是一個Error對象,說明當adStatus值為adStatusErrorsOccured時所發生

的錯誤,否則將不對它進行設置。

?adStatus為EventStatusEnum狀態值,其取值參見表15.10。當調用該事件時,如

果引發事件的操作成功,該參數設置為adStatusOK,如果操作失敗,則設置為

ad

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論