標題標題  顯示論壇會員列表名單  搜索論壇搜索  HelpHelp
  注冊注冊  登入登入
ASP教學區
 DoReMe : ASP教學區
主題 話題: 第二十二章 Activex數據對像 回復發表新主題
作者
貼子內容 << Prev Topic下一個主題 >>
erisa
Groupie
Groupie


加入: 2005/2月/16
Online Status: Offline
回復: 43
Posted: 2005/2月/16 11:48上午 | IP記錄 引用 erisa

這一章介紹Activex數據對像(ADO)。第一節是這些對象的概述。第二節一步一步地引導你使用ADO從數據庫中讀取數據和 向數據庫中存儲數據。最後,在第三節,將向你介紹一種特殊的重要的ADO對像:連接對象。
Back to Top 查看 erisa's 資料 搜索其他貼子 erisa 訪問 erisa's
 
erisa
Groupie
Groupie


加入: 2005/2月/16
Online Status: Offline
回復: 43
Posted: 2005/2月/16 11:49上午 | IP記錄 引用 erisa

Activex數據對像概述

使用Activex數據對像(ADO),你可以對來自許多種數據提供者的數據進行讀取和寫入操作。例如,你可以使用ADO來訪問 Microsoft Access,Microsoft SQL和Oracle數據庫中的信息。你甚至可以使用ADO從Microsoft Excel表格中讀取信息。

在這本書裡,你將學習如何使用ADO操作Microsoft SQL Sever數據庫。所有的例子都假定你是在使用這種數據庫。但是,你應該知道,你在下面幾章中學到的大部分內容對其它類型的數據 庫也是適用的。

在第三部分「操作數據:SQL」中,你學習了如何適用結構化查詢語言(SQL)。從這一章開始,你將很好地應用第三章所學的知識 。學習的重點是結合ADO,使用SQL對一個數據庫進行讀寫操作。ADO和SQL的的這種結合是功能很強大的。

 

注意

要瞭解Activex數據對象的方法,屬性,和集合的詳細內容,請參考書後的附錄A,「ASP對像和組件快速參考」。

 

Activex數據對像共有七種獨立的對象。下面列出了這七種對象的名字,並簡要介紹了它們的功能:


連接對象。代表與一個數據源的唯一對話。例如,你可以用連接對像來打開一個對Microsoft SQL Sever的連接。


記錄集對象。代表來自一個數據提供者的一組記錄。例如,你可以用一個記錄集對像來修改一個SQL Sever表中的記錄。


域對象。代表一個記錄集中的一個域。


命令對象。代表一個命令。例如,你可以用命令對像執行一個SQL存儲過程或有參數的查詢。


參數對象。代表SQL存儲過程或有參數查詢中的一個參數。


屬性對象。代表數據提供者的具體屬性。

錯誤對象。代表ADO錯誤。

Back to Top 查看 erisa's 資料 搜索其他貼子 erisa 訪問 erisa's
 
erisa
Groupie
Groupie


加入: 2005/2月/16
Online Status: Offline
回復: 43
Posted: 2005/2月/16 11:50上午 | IP記錄 引用 erisa

使用Activex數據對像

這一節將一步一步地引導你在你的ASP網頁中使用ADO。首先你將學習如何配置你的服務器以使用ADO。接著,在下一節提供了一 個簡單的例子,演示如何使用ADO對數據庫進行讀寫操作。最後,考慮到你會遇到一些問題,有一節內容講述ADO的調試。

 

配置服務器以使用Activex數據對像

本書假定你是在Microsoft SQL Sever中使用ADO。在繼續下面的內容之前,Microsoft SQL Sever必須與你的Web服務器安裝在同一台機器上,或者兩台機器在同一個網絡中。要瞭解安裝和配置Microsoft SQL Sever的詳細內容,請參閱第三章「安裝和使用SQL Sever」。

在能夠使用ADO之前,你必須先建立一個數據源。數據源包含了如何與一個數據提供者進行連接的信息。在這種情況下,你將使用數據 源與Microsoft SQL Sever建立連接。數據源共有三種類型:你可以建立用戶數據源,系統數據源,或者文件數據源。當你要建立一個與Web服務器一 起使用的數據源時,你應該建立一個文件數據源。建立文件數據源的好處是連接信息存儲在一個實際的文件中。不止一個用戶可以訪問這 個文件。而且,如果你需要把Web應用程序從一種Web服務器移植到另一種Web服務器上,你只需要移植這個文件即可。

 

注意

在建立一個數據源之前,應確保SQL Sever正在運行。通過MS SQL Sever程序組中的SQL服務管理器可以確定SQL服務是否在運行。

 

按如下步驟可以建立一個新的文件數據源:


打開WINDOWS NT SEVER的控制面板(選擇Start|Setting|Control Panel)。


單擊ODBC的圖標。


單擊標籤File DSN。


單擊按鈕Add,出現Create New Data Source對話框。


在對話框中,選擇SQL Sever驅動程序並單擊按鈕Next,出現Create a New Data Source對話框。


輸入你所建的數據源的名字。例如,輸入mydata.dsn。單擊Next,再單擊Finish,則wizard程序Creat e a New Data Source to SQL Sever會被啟動(見圖22.1)。


在文本框Description中,輸入一個描述,如My Data Source。在文本框Sever中,輸入安裝了SQL Sever的服務器的名字。(如果SQL Sever與Web服務器安裝在同一台機器上,你可以輸入Local)單擊Next。


一系列對話框出現,要求你定制數據源的各種屬性。你要指定一個缺省數據庫。選擇你的表所在的數據庫作為缺省數據庫。讓其它的選項 保持其缺省值,單擊Next,關閉所有的對話框。


最後,給你一個測試新數據源的機會。如果測試成功了,單擊OK,添加這個新數據源。

 

圖22.1 用SQL Server Wizard創建一個新數據源


你已經建立了一個名為mydata.dsn的新數據源。你可以使用這個數據源連接到Microsoft SQL Sever.(下一節將介紹如何進行連接)

 

使用Activex數據對像對數據庫進行讀寫

這一節給出了一個如何使用ADO對Microsoft SQL Sever數據庫進行讀寫操作的例子。舉這個例子有兩個目的:它演示了從ASP網頁中訪問Microsoft SQL Sever的基本方法,而且你可以用這個例子檢測服務器的配置是否正確。

表22.1所示的網頁把文本「Hello World!」插入一個表中,然後,從表中取出這個文本並顯示在瀏覽器中。

 

表22.1 Hello World!

<HTML><HEAD><TITLE> ADO Example </TITLE></HEAD><BODY><%Set MyConn=Server.CreateObject("ADODB.Connection")MyConn.Open "FILEDSN=d:\Program Files\Common Files\ODBC\Data Sources\MyData.dsn"MyConn.Execute "INSERT MyTable (MyColumn) VALUES ('Hello World!')"Set RS=MyConn.Execute("SELECT * FROM MyTable")Response.Write(RS("MyColumn"))MyConn.Close%>< /BODY></HTML>

 

在使用這個例子之前,你需要建立一個名為Mytable的表。你可以使用ISQL/w來創建它。啟動這個程序,選擇你的缺省數據 庫,然後執行如下的SQL 語句:

 

CREATE TABLE mytable (mycolumn VARCHAR(255))

 

注意

要瞭解建立表的更多信息,請參見第10章「SQL基礎」。

 

這個網頁的第一行創建了連接對象的一個實例。接下來調用連接對象的open方法,打開了一個對數據庫的連接。在open方法中用 到了你在上一節所建立的數據源,以建立對數據庫的連接。(用你的計算機中的實際路徑代替這個腳本中文件數據源的路徑。)

一旦打開了一個連接,你就可以用這個連接執行SQL語句。在這個例子中,用Execute方法執行了兩個SQL語句。首先,用S QL INSERT語句把字符串「Hello World!」輸入到了數據庫中。然後用SQL SELECT語句從表中取出了這個字符串。

如果你的系統配置正確,字符串「Hello World!」將會顯示在瀏覽器窗口中。該字符串先被插入數據庫,又被取出並顯示。如果有什麼不正常,請參看下一節。

 

調試Activex數據對像

如果你用ADO訪問Microsoft SQL Sever時出現問題,這一節將對你有所幫助。許多原因會導致上一節中所示的ASP網頁執行失敗。下面列出了你通常會遇到的一些 問題的症狀以及可能的原因:

 


症狀:出現錯誤信息 Unable to create file buffer.

原因:文件數據源不正確。如果文件數據源的路徑或名字有誤,或者該數據源不存在,你就會收到這個錯誤信息。你應確保網頁中ope n方法所使用的文件數據源的路徑與你計算機中的實際路徑相同。

 


症狀:出現錯誤信息 Invalid object name 『mytablw』

原因1:數據庫中不存在表』mytable』。按照上一節中所講的方法用ISQL/w創建這個表。

原因2:表mytable不在缺省數據庫中。你需要指定一個缺省數據庫。選擇Start|Settings|Control Panel。單擊ODBC圖標,然後單擊File DSN標籤。選擇你的文件數據源的名字,單擊Configure,再單擊Options。在對話框中指定你的確省數據庫的名字。

 


症狀:出現錯誤信息 The sever appears to be not available

原因:SQL Sever沒有運行。從Microsoft SQL Sever程序組中選擇SQL Sevice Manager。選擇MSSQLSEVER並單擊綠燈。

 


症狀:出現錯誤信息 Login failed。

原因:你沒有使用WINDOWS NT確認模式。建立數據源時輸入了錯誤的帳號和口令。選擇Start|Settings|Control Panel。單擊ODBC圖標,然後單擊File DSN標籤。選擇你的文件數據源的名字並單擊Configure。你可以選擇Use Trusted Connection,或輸入合法的帳號和口令。

 


症狀:出現錯誤信息 INSERT permission denied on object mytable 或

SELECT permission denied on objict mytable。

原因:建立數據源時指定的帳號沒有訪問表mytable的足夠的權限。你需要改變文件數 據源的註冊帳號,或者給該用戶或用戶組提供更多的權限。

 

要提供對一個表的更多權限,從Microsoft SQL Sever程序組中啟動SQL事務管理器,找到表mytable並用右鍵點擊它。選擇Permissions。現在你可以為不同 的用戶或用戶組設置對這個表的操作權限。

Back to Top 查看 erisa's 資料 搜索其他貼子 erisa 訪問 erisa's
 
erisa
Groupie
Groupie


加入: 2005/2月/16
Online Status: Offline
回復: 43
Posted: 2005/2月/16 11:50上午 | IP記錄 引用 erisa

使用連接對像

與數據庫的所通信都要通過一個打開的連接來進行。在對一個數據庫進行數據的插入和讀取之前,必須先打開與這個數據庫的連接。這種 打開和關閉一個連接的操作與打電話的過程有相似之處。在你能夠與SQL Sever進行通信之前,你必須先呼叫它。

這一節講如何使用ADO連接對象。首先你將學習如何打開和關閉一個對數據庫的連接。接下來,你將學會如何通過一個打開的連接執行 SQL語句。最後,你將學習如何用連接對像創建事務處理。

 

打開和關閉數據庫連接

要打開與一個數據庫的連接,你可以創建連接對象的一個實例。創建了這個實例之後,你就可以調用連接對象的open方法,打開一個 連接。這裡有一個例子:

 

<%

Set MyConn=Sever.CreateObject(「ADODB.Connection」)

MyConn.Open 「FILEDSN=d:\Program Files\Common Files\ODBC\Data Sources\MyData.dsn」

MyConn.Execute 「INSERT Mytable (mycolumn) VALUES (『Hello World!』)」

MyConn.Close

%>

 

在這個例子中,創建了連接對象的一個實例MyConn。然後調用連接對象的open方法。接下來,調用連接對象的Execute 方法,執行了一個SQL語句。最後,關閉這個連接。

每次打開一個新連接時都要輸入文件數據源的路徑和名字,這實在是個另人厭煩的工作。你可以把這個字符串分配給一個session 變量或者在一個包含文件中把它定義為一個常量。這樣,你只需要鍵入一個變量名即可,而不必輸入文件數據源的完整名稱。要定義一個 包含有文件數據源名字的session變量,你可以在文件Global.asa中定義。例如,你可以把下面的內容添加到文件Gl obal.asa的session_onstart腳本中:

 

session(「connectionstring」)=」FILEDSN=d:\Program Files\Common

Files\ODBC\Data Sources\MyData.dsn」

 

注意

要瞭解使用session變量的更多信息,請參閱第16章「使用Active Sever Pages Sessions」。

 

建立了這個session變量後,你就可以用如下的腳本打開一個連接:

 

<%

Set MyConn=Sever.CreateObject(「ADODB.Connection」)

MyConn.Open Session(「connectionstring」)

%>

 

把文件數據源的名字分配給一個session變量的另一個好處是,你將來可以很容易地改變數據源。如果你需要使用另外一個數據源 ,你只要改變文件Global.asa中的一個session變量的值即可。

使用完一個連接後,你應該關閉它。這就像掛斷一個電話,從而釋放佔用的線路。連接對象的close方法可以關閉一個連接。關閉了 一個連接後,你就不能在用這個連接與數據庫進行通信。因此,依賴這個連接支持的其它對象也不能再與數據庫相通信。

 

通過打開的連接執行SQL語句

通過打開的連接執行SQL語句,要用到Execute方法。這個方法有兩種形式:一種形式用來從數據庫中返回信息,當不需要返回 信息時,則使用另一種形式。

下面的例子演示了如何使用Execute方法執行一個沒有返回結果的SQL語句:

 

<%

Set MyConn=Sever.CreateObject(「ADODB.Connection」)

MyConn.Open 「FILEDSN=d:\Program Files\Common Files\

OBDC\Data Sources\MyData.dsn」

MyConn.Execute 「INSERT Mytable (MyColumn) VALUES(『Hello World!』)」

MyConn.Close

%>

 

在這個例子中,用Execute方法執行了一個SQL SELECT 語句。因為沒有返回結果,Execute方法不使用括號。

你也可以用Execute方法從一個查詢返回結果。如下例所示:

 

<%

Set MyConn=Sever.CreateObject(「ADODB.Connection」)

MyConn.Open 「FILEDSN=d:\Program Files\

Common Files\ODBC\Data Sources\MyData.dsn」

Set RS=MyConn.Execute(「SELECT * FROM Mytable」)

MyConn.Close

%>

 

在這個例子中,使用了Execute()方法以返回一個SQL SELECT查詢的結果。與上一個例子不同,這個Execute方法使用了括號。當你要返回結果時,千萬別忘了使用括號,否則你 會收到錯誤信息 Expected end of statement.

這個SQL查詢的結果被讀取到記錄集對象的一個實例RS中。該記錄集由Execute()方法自動創建。你將在下一章中學習如何 使用記錄集。

Execute方法包含兩個可選參數。你可以給一個RecordsAffected參數,用來保存被執行的SQL語句所操作的記 錄個數。你還可以給一個Options參數,用來提供被執行的SQL語句的有關信息。下面的例子同時使用了這兩種可選參數:

 

<!--#INCLUDE VIRTUAL=」ADOVBS.inc」-->

<%

Set MyConn=Sever.CreateObject(「ADODB.Connection」)

MyConn.Open 「FILEDSN=d:\Program Files\

Common Files\ODBC\Data Sources\MyData.dsn」

MyConn.Execute 「UPDATE Mytable Set Mycolumn=』Goodbye!』」,HowMany,adCMDText

Response.Write(HowMany)

MyConn.Close

%>

 

在這個腳本中,執行了一個SQL UPDATE語句,改變了表Mytable中所有記錄的值。Execute方法帶有兩個參數。第一個參數是RecordAffe cted參數。在這個例子中,變量HowMany被作為RecordAffected參數。這個SQL語句執行後,變量HowM any中將存有該語句所操作的記錄數。例如,如果表中有32條記錄被更新,變量HowMany的值將是32。

上例中Execute方法的第二個參數是Options參數。在這個例子中,Options參數被指定為常量adCMDText 。這個常量用來告訴ADO,它應該把字符串的內容解釋為命令文本,而不是一個表的名字或一個存儲過程。通過告訴ADO被執行的字 符串的內容的有關信息,這個常量使得ADO更高效地執行這個命令。(要瞭解命令的更多信息,請參見第24章「使用命令」。)

你可以使用下面的常量作為Options參數:

 


adCMDTable。被執行的字符串包含一個表的名字。


adCMDText。被執行的字符串包含一個命令文本。


adCMDStoredProc。被執行的字符串包含一個存儲過程名。


adCMDUnknown。不指定字符串的內容。(這是缺省值。)

 

在你能夠在一個ASP網頁中使用這些常量之前,你必須先包含一個名為ADOVBS.inc的特殊文件。文件ADOVBS.inc 中包含ADO使用的所有VBSript常量。上例中第一行的INCLUDE語句包含了文件ADOVBS.inc。

在你安裝ASP時,這個文件應該已經被自動安裝了。一般來說,它會被安裝在c:\Program Files\Common Files\System\ADO目錄下。但是,你也許不得不使用WINDOWS NT任務欄中的Find命令,找到這個文件的確切位置,找到它之後,把這個文件拷貝到你的Active Sever Pages目錄中。

 

注意

如果你使用Jscript,而不是VBSript,ADO常量的包含文件應該是ADOJAVAS.inc。

 

打開一個連接後,你需要調用Execute方法多少次,你就可以調用多少次。

例如,下面的腳本向表Mytable中輸入了32個字符串:

 

<!--#INCLUDE VIRTUAL=」ADOVBS.inc」-->

<%

Set MyConn=Sever.CreateObject(「ADODB.Connection」)

MyConn.Open 「FILEDSN=d:\Program Files\

Common Files\ODBC\Data Sources\MyData.dsn」

FOR i=1 TO 32

MySQL=」INSERT Mytable (Mycolumn) VALUES (『 This is entry 「&i&」 』)」

MyConn.Execute MySQL, HowMany,adCMDText

NEXT

MyConn.Close

%>

 

這段腳本使用了一個FOR……NEXT循環,向表Mytable中插入了32條記錄。變量MySQL包含Execute方法使用 的SQL命令字符串。注意書寫SQL字符串時如何使用單引號和雙引號。單引號用來標記SQL語句內部的引用。雙引號用來指定VB Sript內字符串的開始和結束。

用Execute方法幾乎可以這些所有的SQL命令。例如,下面的腳本創建了一個表,然後添加數據,清除數據,最後刪除這個表:

 

<!--#INCLUDE VIRTUAL=」ADOVBS.inc」-->

<%

Set MyConn=Sever.CreateObject(「ADODB.Connection」)

MyConn.Open 「FILEDSN=d:\Program Files\

Common Files\ODBC\Data Sources\MyData.dsn」

『 create a new table

MySQL=」CREATE TABLE newtable (mycolumn VARCHAR(255))」

MyConn.Execute MySQL

『 populate the table

MySQL=」INSERT newtable (mycolumn) VALUES(『hello』)」

MyConn.Execute MySQL

『truncate the table

MySQL=」TRUNCATE TABLE newtable」

MyConn.Execute MySQL

『drop the table

MySQL=」DROP TABLE newtable」

MyConn.Execute MySQL

Myconn.Close

%>

 

創建事務處理

當一組語句構成一個事務處理時,如果一個語句沒有執行成功,則所有的語句都不成功。如果你需要更新多個表中的數據,你不希望對一 個表的操作失敗,而對其它表的操作成功了。這時所有事務處理是有用的。

例如,假設某個時間有人在你的站點上買了東西,有關的交易信息存儲在兩個表中 。一個表用來保存買者的信用卡信息,另一個表包含了要買的商品的信息。

現在,假如有一個人正試圖從你的站點上買東西。他的信用卡號碼已經輸入了第一個表中。但是,就在這時,發生了意外情況,一道閃電 擊中了你的服務器,使第二個表沒有被更新。在這種情況下,當然最後是兩個表都沒有被更新過。你當然不想收這個人的錢去買他不想買 的東西。使用事務處理,你可以防止第二個表沒有被更新而第一個表被更新的情況出現:

 

<%

Set MyConn=Sever.CreateObject(「ADODB.Connection」)

MyConn.Open 「FILEDSN=d:\Program Files\

Common Files\ODBC\Data Sources\MyData.dsn」

MyConn.BeginTrans

MyConn.Execute 「INSERT CreditCard (CCNum) VALUES (『5555-55-444-44-4444』)」

MyConn.Execute 「INSERT Shipping (Address) VALUES(『Paris,France』)」

MyConn.CommitTrans

MyConn.Close

%>

在這個例子中,用BeginTrans方法和CommitTrans方法來標記事務處理的開始和結束。在BeginTrans方 法被調用之後,CommitTRans方法被調用之前,不管出現什麼錯誤,兩個表都不會被更新。

你也可以恢復一個事務處理的操作(操作作廢)。要做到這一點,應使用RollBackTrans方法。考慮如下的腳本:

 

<%

Set MyConn=Sever.CreateObject(「ADODB.Connection」)

MyConn.Open 「FILEDSN=d:\Program Files\

Common Files\ODBC\Data Sources\MyData.dsn」

MyConn.BeginTrans

MyConn.Execute 「INSERT CreditCard (CCNum) VALUES (『5555-55-444-44-4444』)」

MyConn.Execute 「INSERT Shipping (Address) VALUES(『Paris,France』)」

IF WEEKDAYNAME(WEEKDAY(DATE))=」Sunday」 THEN

MyConn.RollBackTrans

ELSE

MyConn.CommitTrans

END IF

MyConn.Close

%>

 

在這個例子中,使用了RollBackTrans方法,如果是星期天,就取消事務處理所做的操作。在星期天兩個表都不能被更新。

 

 

總結

這一章介紹了Activex數據對象。第一節是ADO的概述。在第二節,你學會了如何配置服務器以使用ADO。最後,向你介紹了 最重要的ADO對像之一:連接對象。

Back to Top 查看 erisa's 資料 搜索其他貼子 erisa 訪問 erisa's
 

如果你想回復的話你必須首先 login
如果你還沒有注冊的話你必須首先 注冊

  回復發表新主題
顯示可打印的頁面 顯示可打印的頁面

論壇跳轉
不能 張貼新論題在這個討論版
不能 回應論題在這個討論版
不能 刪除你的發言在這個討論版
不能 編輯你的發言在這個討論版
不能 新增投票標題在這個討論版
不能 在這個討論版投票

Edit by doreme Forums version 2004
Welcome ©2001-2004 doreme Guide

This page was generated in 0.6250 seconds.

 
保養品
保養品, Skin Care
www.elady.tw
Makeups Wholesale
Wholesale Cosmetics SkinCares
lungjyi.com
保養品批發
名牌保養品、保養品批發
www.perfume.com.tw/skincare
Wholesale Perfumes
Fragrances Perfumes Wholesale
lungjyi.net