?? 10.htm
字號:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<title>訪問數(shù)據(jù)庫</title>
</head>
<body>
<p align="center"><big><strong><big><big><a NAME="_Toc442147858">訪問數(shù)據(jù)庫</a></big></big></strong></big></p>
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="0" width="578">
<tr>
<td width="576">ActiveX Data Objects (ADO) 是一項(xiàng)容易使用并且可擴(kuò)展的將數(shù)據(jù)庫訪問添加到 Web 頁的技術(shù)。可以使用 ADO 去編寫緊湊簡明的腳本以便連接到 Open Database Connectivity (ODBC) 兼容的數(shù)據(jù)庫和 OLE DB 兼容的數(shù)據(jù)源。如果您是一個對數(shù)據(jù)庫連接有一定了解的腳本編寫人員,那么您將發(fā)現(xiàn) ADO 命令語句并不復(fù)雜而且容易掌握。同樣地,如果您是一個經(jīng)驗(yàn)豐富的數(shù)據(jù)庫編程人員,您將會正確認(rèn)識 ADO 的先進(jìn)的與語言無關(guān)性和查詢處理功能。<br>
<br>
創(chuàng)建 ODBC DSN 文件<br>
<br>
在創(chuàng)建數(shù)據(jù)庫腳本之前,必須提供一條使 ADO 定位、標(biāo)識和與數(shù)據(jù)庫通訊的途徑。數(shù)據(jù)庫驅(qū)動程序使用 Data Source Name (DSN) 定位和標(biāo)識特定的 ODBC 兼容數(shù)據(jù)庫,將信息從 Web 應(yīng)用程序傳遞給數(shù)據(jù)庫。典型情況下,DSN 包含數(shù)據(jù)庫配置、用戶安全性和定位信息,且可以獲取 Windows NT 注冊表項(xiàng)中或文本文件的表格。<br>
<br>
通過 ODBC,您可以選擇希望創(chuàng)建的 DSN 的類型:用戶、系統(tǒng) 或 文件。用戶和系統(tǒng) DSN 存儲在 Windows NT 注冊表中。系統(tǒng) DSN 允許所有的用戶登錄到特定的服務(wù)器上去訪問數(shù)據(jù)庫,而用戶 DSN 使用適當(dāng)?shù)陌踩矸葑C明限制數(shù)據(jù)庫到特定用戶的連接。文件 DSN 用于從文本文件中獲取表格,提供了對多用戶的訪問,并且通過復(fù)制 DSN 文件,可以輕易地從一個服務(wù)器轉(zhuǎn)移到另一個服務(wù)器。由于以上原因,本主題中的示例將使用文件 DSN。<br>
<br>
通過在 Windows 的“開始”菜單打開“控制面板”,您可以創(chuàng)建基于 DSN 的文件。雙擊“ODBC”圖標(biāo),然后選擇“文件 DSN”屬性頁,單擊“添加”,選擇數(shù)據(jù)庫驅(qū)動程序,然后單擊“下一步”。按照后面的指示配置適用于您的數(shù)據(jù)庫軟件的 DSN。<br>
<br>
配置 Microsoft Access 數(shù)據(jù)庫的文件 DSN<br>
<br>
在“創(chuàng)建新數(shù)據(jù)源”對話框中,從列表框選擇“Microsoft Access Driver”,然后單擊“下一步”。 <br>
<br>
鍵入您的 DSN 文件名,然后單擊“下一步”。 <br>
<br>
單擊“完成”創(chuàng)建數(shù)據(jù)源。 <br>
<br>
在“ODBC Microsoft Access 97 安裝程序”對話框中,單擊“選擇”。選擇 Microsoft Access 數(shù)據(jù)庫文件 (*.mdb),然后單擊“確定”。 <br>
<br>
注意 由于性能和可靠性的原因,我們極力推薦您使用“客戶-服務(wù)器數(shù)據(jù)庫引擎”配置由這樣一種 Web 應(yīng)用程序驅(qū)動的數(shù)據(jù),這些 Web 應(yīng)用程序必須滿足 10 個以上的用戶的同時(shí)訪問。盡管 ASP 可以使用任何 ODBC 兼容的數(shù)據(jù)庫,但它是為使用客戶-服務(wù)器數(shù)據(jù)庫而設(shè)計(jì)的,而且經(jīng)過了嚴(yán)格的測試,這些數(shù)據(jù)庫包括 Microsoft ? SQL Server、Oracle 等。 <br>
<br>
ASP 支持共享文件數(shù)據(jù)庫(如 Microsoft ? Access 或 Microsoft ? FoxPro)作為有效的數(shù)據(jù)源。盡管在 ASP 文檔中的一些示例使用共享文件數(shù)據(jù)庫,但我們建議只將此類數(shù)據(jù)庫引擎用于開發(fā)或有限的配置方案。共享文件數(shù)據(jù)庫可能無法很好地適用于可滿足高需求、高質(zhì)量的 Web 應(yīng)用程序的客戶-服務(wù)器數(shù)據(jù)庫。<br>
<br>
配置 SQL Server 數(shù)據(jù)庫文件 DSN<br>
<br>
注意 如果數(shù)據(jù)庫駐留在遠(yuǎn)程服務(wù)器上,請與服務(wù)器管理員聯(lián)系,獲取附加的配置信息;下面的過程使用 SQL Server 的 ODBC 默認(rèn)的設(shè)置,它可能不適用于您的硬件配置。<br>
<br>
在“創(chuàng)建新數(shù)據(jù)源”對話框中,從列表框中選擇“SQL Server”,然后單擊“下一步”。 <br>
<br>
鍵入 DSN 文件的名稱,然后單擊“下一步”。 <br>
<br>
單擊“完成”創(chuàng)建數(shù)據(jù)源。 <br>
<br>
鍵入運(yùn)行 SQL 服務(wù)程序的服務(wù)器的名稱、登錄 ID 和密碼。 <br>
<br>
在“創(chuàng)建 SQL Server 的新數(shù)據(jù)源”對話框中,在“服務(wù)器”列表框中鍵入包含 SQL Server 數(shù)據(jù)庫的服務(wù)器的名稱,然后單擊“下一步”。 <br>
<br>
選擇驗(yàn)證登錄 ID 的方式。 <br>
<br>
如果要選擇 SQL 服務(wù)器驗(yàn)證,請輸入一個登錄 ID 和密碼,然后單擊“下一步”。 <br>
<br>
在“創(chuàng)建 SQL Server 的新數(shù)據(jù)源”對話框中,設(shè)置默認(rèn)數(shù)據(jù)庫、存儲過程設(shè)置的驅(qū)動程序和 ANSI 標(biāo)識,然后單擊“下一步”。(要獲取詳細(xì)信息,請單擊“幫助”。) <br>
<br>
在對話框(同樣名為“創(chuàng)建 SQL Server 的新數(shù)據(jù)源”)中,選擇一種字符轉(zhuǎn)換方法,然后單擊“下一步”。 (詳細(xì)信息,請單擊“幫助”。) <br>
<br>
在下一個對話框(同樣名為“創(chuàng)建 SQL Server 的新數(shù)據(jù)源”)中,選擇登錄設(shè)置。 <br>
<br>
注意 典型情況下, 您只能使用日志來調(diào)試數(shù)據(jù)庫訪問問題。<br>
<br>
在“ODBC Microsoft SQL Server 安裝程序”對話框中,單擊“測試數(shù)據(jù)源”。如果 DSN 正確創(chuàng)建,“測試結(jié)果”對話框?qū)⒅赋鰷y試成功完成。 <br>
<br>
SQL server 連接和安全信息<br>
<br>
如果您正在開發(fā)用于連接遠(yuǎn)程 SQL Server 數(shù)據(jù)庫的 ASP 數(shù)據(jù)庫應(yīng)用程序,應(yīng)考慮以下問題:<br>
<br>
連接方案- 您可以選擇 TCP/IP 套接字和命名管道的方法訪問遠(yuǎn)程的 SQL Server 數(shù)據(jù)庫。當(dāng)使用命名管道時(shí),因?yàn)樵诮⑦B接之前,數(shù)據(jù)庫用戶必須被 Windows NT 確認(rèn),所以對只有適當(dāng)?shù)?SQL Server 訪問身份而在該計(jì)算機(jī)上沒有 Windows NT 用戶帳號的用戶可能會被拒絕訪問命名管道。作為一種替代方案,使用 TCP/IP 套接字的連接可直接連接到數(shù)據(jù)庫服務(wù)器,而不必通過使用命名管道的中間計(jì)算機(jī)。因?yàn)槭褂?TCP/IP 套接字連接可直接連接到數(shù)據(jù)庫 server,所以通過 SQL Server 的確認(rèn),用戶就可以獲得訪問權(quán),而不必通過 Windows NT 的確認(rèn)。 <br>
<br>
注意 在連接到遠(yuǎn)程數(shù)據(jù)庫時(shí)使用 TCP/IP 套接字可提高性能。<br>
<br>
安全性 - 如果您使用 SQL Server 的 集成 或 混合 安全特性,并且 SQL Server 數(shù)據(jù)庫位于遠(yuǎn)程服務(wù)器上,則不能使用 Windows NT 請求/響應(yīng)的確認(rèn)。也就是說,不能將 Windows NT 請求/響應(yīng)身份證轉(zhuǎn)發(fā)到遠(yuǎn)程計(jì)算機(jī)上,而只能使用基本身份驗(yàn)證,它根據(jù)用戶提供用戶名和口令信息進(jìn)行。 <br>
<br>
有關(guān)這一主題的詳細(xì)信息,請參閱 http://www.microsoft.com/sqlsupport/<br>
<br>
上的 Microsoft SQL Server 技術(shù)支持主頁。<br>
<br>
配置 Oracle 數(shù)據(jù)庫文件 DSN<br>
<br>
首先要確保 Oracle 用戶軟件被正確地安裝要創(chuàng)建 DSN 的計(jì)算機(jī)上。詳細(xì)信息,請與服務(wù)器管理員聯(lián)系或參閱數(shù)據(jù)庫軟件文檔。<br>
<br>
在“創(chuàng)建新數(shù)據(jù)源”對話框中,從列表框中選擇“Microsoft ODBC for Oracle”,然后單擊“下一步”。 <br>
<br>
鍵入 DSN 文件的名稱,然后單擊“下一步”。 <br>
<br>
單擊“完成”創(chuàng)建數(shù)據(jù)源。 <br>
<br>
輸入用戶名、密碼和服務(wù)器名,然后單擊“確定”。 <br>
<br>
注意 DSN 文件用 .dsn 擴(kuò)展名,位于 \Programs\Common Files\ODBC\Data Sources 目錄中。<br>
<br>
有關(guān)創(chuàng)建 DSN 文件的詳細(xì)信息,請?jiān)L問 Microsoft ODBC Web 站點(diǎn):http://microsoft.com/odbc/。<br>
<br>
連接數(shù)據(jù)庫<br>
<br>
訪問數(shù)據(jù)庫信息的第一步是和數(shù)據(jù)庫源建立連接。ADO 提供 Connection 對象,可以使用該對象建立和管理應(yīng)用程序和 ODBC 數(shù)據(jù)庫之間的連接。Connection 對象具有各種屬性和方法,可以使用它們打開和關(guān)閉數(shù)據(jù)庫連接,并且發(fā)出查詢請求來更新信息。<br>
<br>
要建立數(shù)據(jù)庫連接,首先應(yīng)創(chuàng)建 Connection 對象的實(shí)例。例如,下面的腳本創(chuàng)建 Connection 對象,接著打開數(shù)據(jù)庫連接:<br>
<br>
<%<br>
<br>
'Create a connection object<br>
<br>
Set cn = Server.CreateObject("ADODB.Connection")<br>
<br>
'Open a connection; the string refers to the DSN<br>
<br>
cn.Open "FILEDSN=MyDatabase.dsn"<br>
<br>
%><br>
<br>
注意 無論在等號 (=) 之前還是之后,DSN 字符串都不能包含空格。<br>
<br>
在這種情況下,Connection 對象的 Open 方法引用基于 DSN 的文件,其中包含關(guān)于數(shù)據(jù)庫的位置和配置信息。也可以不引用 DSN,直接顯式引用供應(yīng)程序、數(shù)據(jù)源、用戶 ID 和密碼。有關(guān)建立連接的可選方法的詳細(xì)信息,請參閱 Microsoft ActiveX Data Objects (ADO)。<br>
<br>
用 Connection 對象執(zhí)行查詢<br>
<br>
用 Connection 對象的 Execute 方法,您可以發(fā)出結(jié)構(gòu)化查詢語言 (SQL) 查詢數(shù)據(jù)庫源并檢索結(jié)果。SQL 是用于與數(shù)據(jù)庫通訊的工業(yè)標(biāo)準(zhǔn)語言,它有許多命令可用來檢索和更新信息。<br>
<br>
下面的腳本使用 Connection 對象的 Execute 方法在 SQL INSERT 命令的表格中發(fā)出查詢,該命令將數(shù)據(jù)插入特定的數(shù)據(jù)庫表格。在下面的示例中,腳本將名稱 Jose Lugo 插入名為 Customers 的數(shù)據(jù)庫表中。<br>
<br>
<%<br>
<br>
'Define file based DSN<br>
<br>
strDSN = "FILEDSN=MyDatabase.dsn"<br>
<br>
'Instantiate the Connection object and open a database connection<br>
<br>
Set cn = Server.CreateObject("ADODB.Connection")<br>
<br>
cn.Open strDSN<br>
<br>
'Define SQL SELECT statement <br>
<br>
strSQL = "INSERT INTO Customers (FirstName, LastName) VALUES ('Jose','Lugo')" <br>
<br>
'Use the Execute method to issue a SQL query to database <br>
<br>
cn.Execute(strSQL)<br>
<br>
%><br>
<br>
注意 基于 DSN 路徑字符串的文件在等號(=)前后不應(yīng)包含空格。<br>
<br>
除了 SQL INSERT 命令以外,您也可以使用 SQL UPDATE 和 DELETE 命令更改和刪除數(shù)據(jù)庫信息。<br>
<br>
用 SQL UPDATE 命令,您可以改變數(shù)據(jù)庫表中各項(xiàng)目值。下面的腳本使用 UPDATE 命令將 Customers 表中每個 LastName 字段包含姓 Smith 記錄的 FirstName 字段更改為 Jeff。<br>
<br>
<%<br>
<br>
Set cn = Server.CreateObject("ADODB.Connection")<br>
<br>
cn.Open "FILEDSN=MyDatabase.dsn"<br>
<br>
cn.Execute "UPDATE Customers SET FirstName = 'Jeff' WHERE LastName = 'Smith' "<br>
<br>
%><br>
<br>
要想從數(shù)據(jù)庫表中刪除特定的記錄,可使用 SQL DELETE 命令。下面的腳本從 Customers 表中刪除了所有姓 Smith 的行:<br>
<br>
<%<br>
<br>
Set cn = Server.CreateObject("ADODB.Connection")<br>
<br>
cn.Open "FILEDSN=MyDatabase.dsn"<br>
<br>
cn.Execute "DELETE FROM Customers WHERE LastName = 'Smith'"<br>
<br>
%><br>
<br>
注意 在使用 SQL DELETE 命令時(shí),必須謹(jǐn)慎從事。當(dāng)使用不帶 WHERE 子句的 DELETE 命令時(shí),它將刪除表中的所有行。一定要包含 SQL WHERE 子句來指定要刪除的確切行。<br>
<br>
使用 Recordset 對象處理結(jié)果<br>
<br>
盡管 Connection 對象簡化了連接數(shù)據(jù)庫和查詢?nèi)蝿?wù),但 Connection 對象仍有許多不足。確切地說,檢索和顯示數(shù)據(jù)庫信息的 Connection 對象不能用于創(chuàng)建腳本;您必須確切知道要對數(shù)據(jù)庫作出的更改,然后才能使用查詢實(shí)現(xiàn)更改。<br>
<br>
對于檢索數(shù)據(jù)、檢查結(jié)果、更改數(shù)據(jù)庫,ADO 提供了 Recordset 對象。正如它的名稱所暗示的那樣,Recordset 對象有許多您可以使用的特性,根據(jù)您的查詢限制,檢索并且顯示一組數(shù)據(jù)庫行,即記錄。 Recordset 對象保持查詢返回的記錄的位置,允許您一次一項(xiàng)逐步掃描結(jié)果。<br>
<br>
根據(jù) Recordset 對象的指針類型屬性設(shè)置,您可以滾動和更新記錄。數(shù)據(jù)庫指針可以讓您在一組記錄中定位到特定的項(xiàng)。指針還用于檢索和檢查記錄,然后在這些記錄的基礎(chǔ)上執(zhí)行操作。Recordset 對象有一些屬性,可用于精確地控制指針的行為,提高您檢查和更新結(jié)果的能力。例如,您可以使用 CursorType 和 CursorLocation 屬性設(shè)置指針的類型,將結(jié)果返回給客戶端應(yīng)用程序(結(jié)果通常保留在數(shù)據(jù)庫服務(wù)器上)并顯示其他用戶對數(shù)據(jù)庫的最后一次更改。有關(guān)配置 Recordset 對象指針的信息,請參閱 Microsoft ActiveX Data Objects (ADO)。<br>
<br>
檢索記錄<br>
<br>
一個成功的數(shù)據(jù)庫應(yīng)用程序都使用 Connection 對象建立鏈接并使用 Recordset 對象處理返回的數(shù)據(jù)。通過“協(xié)調(diào)”兩個對象的特定功能,您可以開發(fā)出幾乎可以執(zhí)行任何數(shù)據(jù)處理任務(wù)的數(shù)據(jù)庫應(yīng)用程序。例如,下面的服務(wù)器端腳本使用 Recordset 對象執(zhí)行 SQL SELECT 命令。SELECT 命令檢索一組基于查詢限制的信息。查詢也包含 SQL WHERE 子句,用來縮小查詢的范圍。此例中,WHERE 子句將查詢限制為所有的 Customers 數(shù)據(jù)庫表中包含的姓 Smith 的記錄。<br>
<br>
<%<br>
<br>
'Establish a connection with data source <br>
<br>
strDSN = "FILEDSN=MyDatabase.dsn" <br>
<br>
Set cn = Server.CreateObject("ADODB.Connection")<br>
<br>
cn.Open strDSN<br>
<br>
'Instantiate a Recordset object<br>
<br>
Set rsCustomers = Server.CreateObject("ADODB.Recordset")<br>
<br>
'Open a recordset using the Open method<br>
<br>
' and use the connection established by the Connection object<br>
<br>
strSQL = "SELECT FirstName, LastName FROM Customers WHERE LastName = 'Smith' "<br>
<br>
rsCustomers.Open strSQL, cn <br>
<br>
Cycle through record set and display the results<br>
<br>
' and increment record position with MoveNext method<br>
<br>
Set objFirstName = rsCustomers("FirstName") <br>
<br>
Set objLastName = rsCustomers("LastName") <br>
<br>
Do Until rsCustomers.EOF <br>
<br>
Response.Write objFirstName & " " & objLastName & "<BR>"<br>
<br>
rsCustomers.MoveNext<br>
<br>
Loop<br>
<br>
%><br>
<br>
注意,在前面的例子中,用來建立數(shù)據(jù)庫連接的 Connection 對象和 Recordset 對象使用該連接從數(shù)據(jù)庫中檢索結(jié)果。當(dāng)您需要精確地設(shè)置和數(shù)據(jù)庫建立鏈接所采用的方式時(shí),這個方法是非常有用的。例如,如果您需要在連接嘗試失敗之前指定等待的時(shí)間,則需要使用 Connection 對象去設(shè)置屬性。但是,如果您僅僅想使用 ADO 默認(rèn)的連接屬性建立連接,則應(yīng)該使用 Recordset 對象的 Open 方法去建立鏈接:<br>
<br>
<%<br>
<br>
strDSN = "FILEDSN=MyDatabase.dsn"<br>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -