訪問數據源
ActiveX 數據對象 (ADO) 是一種既易于使用又可擴充的技術,用來將數據庫訪問添加到您的 Web 頁可以使用 ADO 編寫簡潔和可升級的腳本以連接到與 OLE DB 兼容的數據源,如數據庫、電子表格、順序數據文件或電子郵件目錄。OLE DB 是一個系統級的編程接口,它提供一套標準的 COM 接口,用來展示數據庫管理系統的功能。使用 ADO 的對象模型,您可以輕松地(使用 VBScript 或 JScript 等腳本語言)訪問這些接口并將數據庫功能添加到您的 Web 應用程序中。另外,您還可以使用 ADO 訪問與開放式數據庫互連 (ODBC) 兼容的數據庫。 如果您是一位對數據庫互連知識有一定了解的腳本編寫者,您將會發現 ADO 的命令語法很簡單,而且很容易使用。如果您是一位經驗豐富的開發人員,您將會非常欣賞 ADO 提供的這種可升級的對各種數據源的高性能訪問。 關于 ADO 的詳細信息,請訪問 Microsoft 通用數據訪問 (UDA) Web 站點 http://www.microsoft.com/data/。 創建連接字符串
創建 Web 應用程序的第一步是給 ADO 提供一種定位并識別數據源的方法。這是通過“連接字符串”來完成的,連接字符串是一系列用分號分隔的參數,用來定義諸如數據源提供者和數據源位置等參數。ADO 使用連接字符串來識別 OLE DB “提供者”并將提供者指向數據源。提供者是一個組件,用來描述數據源并以行集合的形式將信息展示給應用程序。 下表列出了幾個通用數據源的 OLE DB 連接字符串:數據源 OLE DB 連接字符串 Microsoft Access Provider=Microsoft.Jet.OLEDB.4.0;Source=指向 .mdb 文件的物理路徑 Microsoft SQL Server Provider=SQLOLEDB.1;Source=指向服務器上數據庫的路徑 Oracle Provider=MSDAORA.1;Source=指向服務器上數據庫的路徑 Microsoft Indexing Service Provider=MSIDXS.1;Source=指向文件的路徑
為了提供向后兼容,ODBC 的 OLE DB 提供者支持 ODBC 連接字符串語法。下表列出了通常使用的 ODBC 連接字符串: 數據源驅動程序 ODBC 連接字符串 Microsoft Access Driver={Microsoft Access Driver (*.mdb)};DBQ=指向 .mdb 文件的物理路徑 SQL Serverr Driver={SQL Server};SERVER=指向服務器的路徑 Oracle Driver={Microsoft ODBC for Oracle};SERVER=指向服務器的路徑 Microsoft Excel Driver={Microsoft Excel Driver (*.xls)};DBQ=指向 .xls 文件的物理路徑; DriverID =278 Microsoft Excel 97 Driver={Microsoft Excel Driver (*.xls)};DBQ=指向 .xls 文件的物理路徑;DriverID=790 Paradox Driver={Microsoft Paradox Driver (*.db)};DBQ=指向 .db 文件的物理路徑; DriverID=26 文本 Driver={Microsoft Text Driver (*.txt;*.csv)}; DefaultDir=指向 .txt 文件的物理路徑 Microsoft Visual FoxPro®(帶有一個數據庫容器) Driver={Microsoft Visual FoxPro Driver};SourceType=DBC;SourceDb=指向 .dbc 文件的物理路徑 Microsoft Visual FoxPro(不帶數據庫容器) Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDb=指向 .dbf 文件的物理路徑
注意 (使用 UNC 路徑引用位于遠程計算機上的數據源的)連接字符串可能造成潛在的安全問題。要禁止對您的數據源進行未授權訪問,可為需要訪問數據的計算機創建 Windows 帳號,然后對數據源應用適當的 NTFS 權限。詳細信息,請參閱使用 NTFS 保護文件。 設計 Web 數據應用程序時應考慮的高級問題
由于性能和可靠性的原因,我們強烈推薦,在配置數據驅動 Web 應用程序(需要能滿足大約 10 個以上并發用戶同時進行高要求的訪問)時,使用客戶端服務器數據庫引擎。雖然 ADO 適用于與 OLE DB 兼容的任何數據源,但經過廣泛的測試,主要設計為與客戶端服務器數據庫(如 Microsoft SQL Server 或 Oracle)一起工作。 ASP 支持共享文件數據庫(Microsoft Access 或 Microsoft FoxPro)作為有效的數據源。雖然在 ASP 文檔中有些示例使用了“共享文件”數據庫,但我們還是建議這些類型的數據庫引擎只用于開發目的或有限的開發方案中。共享文件數據庫可能不如客戶端服務器數據庫更適合于高要求和高質量的 Web 應用程序。 如果正在開發 ASP 數據庫應用程序,并且該程序將連接到遠程 SQL Server 數據庫,您還應該注意以下幾點: 選擇 SQL Server 連接方案 要訪問遠程 SQL Server 數據庫,可以選擇 TCP/IP 套接字方法或已命名管道方法。使用已命名管道,必須在建立連接之前由 Windows 對數據庫客戶加以驗證,以防止運行已命名管道的遠程計算機拒絕那些在該計算機上具有適當 SQL Server 訪問證書、但沒有 Windows 用戶帳號的用戶的訪問。作為另一個選擇,使用 TCP/IP 套接字的連接將直接連到數據庫服務器,而不通過中間計算機進行連接。如果通過中間計算機,則與使用已命名管道類似。而且由于使用 TCP/IP 套接字的連接會直接連到數據庫服務器,所以用戶可以通過 SQL Server 驗證而不是 Windows 驗證來獲得訪問。 ODBC 80004005 錯誤 如果訪問 SQL Server 的連接方案沒有正確設置,則正在查看數據庫應用程序的用戶可能會收到 ODBC 80004005 錯誤的消息。要糾正這種情況,可使用本地的已命名管道連接代替網絡的已命名管道連接,但 SQL Server 與 IIS 需在同一計算機上運行。Windows 2000 安全規則不會受到影響,因為此管道是本地連接而不是網絡連接,它可以由匿名用戶帳號來模擬。同樣,在 SQL Server 連接字符串(在 Global.asa 文件或網頁級腳本中)中,將參數 SERVER=server name 更改為 SERVER=(local)。關鍵字 (local) 是由 SQL Server ODBC 驅動程序識別的特殊參數。如果該解決方案無法工作,那么請在 IIS 和 SQL Server 之間嘗試使用非驗證協議,如 TCP/IP 套接字。當 SQL Server 在本地或遠程計算機上運行時,該協議將能夠工作。 注意 為了在連接到遠程數據庫時提高性能,請使用 TCP/IP 套接字。 SQL Server 安全 如果使用 SQL Server 的“集成”或“混合”安全特性,并且 SQL Server 數據庫駐留在遠程服務器上,那么您將無法使用集成的 Windows 驗證。特別地,您無法將集成的 Windows 驗證證書發送給遠程計算機。這意味著您不得不使用基本驗證,該驗證需要用戶提供用戶名和密碼信息。
有關這些問題的詳細信息,請訪問位于 http://www.microsoft.com/china/support/ 的 Microsoft 產品支持服務 Web 站點。 連接到數據源
ADO 提供了“Connection”對象,用于建立與管理應用程序和 OLE DB 兼容數據源或 ODBC 兼容數據庫之間的連接。“Connection”對象的屬性和方法可以用來打開和關閉數據庫連接,并發布對更新信息的查詢。 要建立數據庫連接,首先必須創建“Connection”對象實例。例如,下面的腳本創建“Connection”對象實例,接著打開一個連接: <%'創建 connection 對象Set cnn = Server.CreateObject("ADODB.Connection")'使用 OLE DB 連接字符串打開連接cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MarketData\ProjectedSales.mdb"%>
注意 連接字符串在等號 (=) 的左右并不包含空格。 在這種情況下,“Connection”對象的“Open”方法將引用連接字符串。 使用 Connection 對象執行 SQL 查詢
使用“Connection”對象的“Execute”方法可以將命令發布到數據源,如結構化查詢語言 (SQL) 查詢。(SQL 是與數據庫進行通信的工業標準語言,定義了用來檢索和更新信息的命令。)“Execute”方法可以接收參數,用來指定命令(或查詢)、受影響的數據記錄數和所使用命令的類型。 下面腳本使用“Execute”方法以 SQL “INSERT”命令的形式發布查詢,該命令用來將數據插入指定的數據庫表中。在這種情況下,腳本塊將名字“Jose Lugo”插入到名為“Customers”的數據庫表中。 <%'定義 OLE DB 連接字符串。strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Employees.mdb"'例示 Connection 對象并打開數據庫連接。Set cnn = Server.CreateObject("ADODB.Connection")cnn.Open strConnectionString'定義 SQL SELECT 語句。strSQL = "INSERT INTO Customers (FirstName, LastName) VALUES ('Jose','Lugo')"'使用 Execute 方法將 SQL 查詢發布到數據庫。cnn.Execute strSQL,,adCmdText + adExecuteNoRecords%>
注意,在用來執行查詢的語句中指定了兩個參數:adCmdText 和 adExecuteNoRecords。可選參數 adCmdText 指定命令類型,說明提供者必須將此查詢語句(這里是 SQL 查詢語句)評估為命令的文本定義。adExecuteNoRecords 參數指示 ADO 在沒有結果返回到應用程序時不要創建數據記錄集。此參數只用于定義為文本定義(如 SQL 查詢)的命令類型,或已存儲的數據庫過程。雖然 adCmdText 和 adExecuteNoRecords 是可選參數,但在使用“Execute”方法增強數據應用程序性能時應指定這兩個參數。 要點 ADO 參數,如 adCmdText,需要在腳本中先定義然后再使用。一個方便的定義參數的方法是使用“組件類型庫”,它是包含所有 ADO 參數定義的文件。要實施組件類型庫,首先應聲明它。將下面的 <METADATA> 標記添加到 .asp 文件或 Global.asa 文件中以聲明 ADO 類型庫: <!--METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library" TYPE="TypeLib" UUID="{00000205-0000-0010-8000-00AA006D2EA4}"-->
有關實施組件類型庫的詳細信息,請參閱使用變量和常量主題中的使用常量部分。 除了 SQL 的 INSERT 命令外,還可以使用 SQL 的 UPDATE 和 DELETE 命令來更改和刪除數據庫信息。 使用 SQL 的 UPDATE 命令可以更改數據庫表中各個項目的值。下面的腳本使用 UPDATE 命令將 Customers 表中所有在 LastName 字段中包含姓氏 Smith 的 FirstName 字段更改為 Jeff。 <%Set cnn = Server.CreateObject("ADODB.Connection")cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Employees.mdb"cnn.Execute "UPDATE Customers SET FirstName = 'Jeff' WHERE LastName = 'Smith' ",,adCmdText + adExecuteNoRecords%>
要刪除數據庫表中指定的記錄,可使用 SQL 的 DELETE 命令。下面的腳本將刪除 Customers 表中所有姓氏為 Smith 的行: <%Set cnn = Server.CreateObject("ADODB.Connection")cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Employees.mdb"cnn.Execute "DELETE FROM Customers WHERE LastName = 'Smith'",,adCmdText + adExecuteNoRecords%>
注意 在使用 SQL DELETE 命令時務必小心謹慎。不帶 WHERE 子句的 DELETE 命令將刪除表中的所有行。確保包括 SQL WHERE 子句,以便明確指定要刪除的行。
|