程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> ASP技巧 >> 用ASP訪問數據庫的幾種常見方式

用ASP訪問數據庫的幾種常見方式

編輯:ASP技巧

用ASP訪問數據庫的幾種常見方式

ActiveX Data Objects (ADO) 是一項容易使用並且可擴展的將數據庫訪問添加到 Web 頁的技術。可以使用 ADO 去編寫緊湊簡明的腳本以便連接到 Open Database Connectivity (ODBC) 兼容的數據庫和 OLE DB 兼容的數據源。如果您是一個對數據庫連接有一定了解的腳本編寫人員,那麼您將發現 ADO 命令語句並不復雜而且容易掌握。同樣地,如果您是一個經驗豐富的數據庫編程人員,您將會正確認識 ADO 的先進的與語言無關性和查詢處理功能。

創建 ODBC DSN 文件
在創建數據庫腳本之前,必須提供一條使 ADO 定位、標識和與數據庫通訊的途徑。數據庫驅動程序使用 Data Source Name (DSN) 定位和標識特定的 ODBC 兼容數據庫,將信息從 Web 應用程序傳遞給數據庫。典型情況下,DSN 包含數據庫配置、用戶安全性和定位信息,且可以獲取 Windows NT 注冊表項中或文本文件的表格。

通過 ODBC,您可以選擇希望創建的 DSN 的類型:用戶、系統 或 文件。用戶和系統 DSN 存儲在 Windows NT 注冊表中。系統 DSN 允許所有的用戶登錄到特定的服務器上去訪問數據庫,而用戶 DSN 使用適當的安全身份證明限制數據庫到特定用戶的連接。文件 DSN 用於從文本文件中獲取表格,提供了對多用戶的訪問,並且通過復制 DSN 文件,可以輕易地從一個服務器轉移到另一個服務器。由於以上原因,本主題中的示例將使用文件 DSN。

通過在 Windows 的“開始”菜單打開“控制面板”,您可以創建基於 DSN 的文件。雙擊“ODBC”圖標,然後選擇“文件 DSN”屬性頁,單擊“添加”,選擇數據庫驅動程序,然後單擊“下一步”。按照後面的指示配置適用於您的數據庫軟件的 DSN。

配置 Microsoft Access 數據庫的文件 DSN

在“創建新數據源”對話框中,從列表框選擇“Microsoft Access Driver”,然後單擊“下一步”。
鍵入您的 DSN 文件名,然後單擊“下一步”。
單擊“完成”創建數據源。
在“ODBC Microsoft Access 97 安裝程序”對話框中,單擊“選擇”。選擇 Microsoft Access 數據庫文件 (*.mdb),然後單擊“確定”。
注意 由於性能和可靠性的原因,我們極力推薦您使用“客戶-服務器數據庫引擎”配置由這樣一種 Web 應用程序驅動的數據,這些 Web 應用程序必須滿足 10 個以上的用戶的同時訪問。盡管 ASP 可以使用任何 ODBC 兼容的數據庫,但它是為使用客戶-服務器數據庫而設計的,而且經過了嚴格的測試,這些數據庫包括 Microsoft SQL Server、Oracle 等。

ASP 支持共享文件數據庫(如 Microsoft Access 或 Microsoft FoxPRo)作為有效的數據源。盡管在 ASP 文檔中的一些示例使用共享文件數據庫,但我們建議只將此類數據庫引擎用於開發或有限的配置方案。共享文件數據庫可能無法很好地適用於可滿足高需求、高質量的 Web 應用程序的客戶-服務器數據庫。

 

配置 SQL Server 數據庫文件 DSN

注意 如果數據庫駐留在遠程服務器上,請與服務器管理員聯系,獲取附加的配置信息;下面的過程使用 SQL Server 的 ODBC 默認的設置,它可能不適用於您的硬件配置。

在“創建新數據源”對話框中,從列表框中選擇“SQL Server”,然後單擊“下一步”。
鍵入 DSN 文件的名稱,然後單擊“下一步”。
單擊“完成”創建數據源。
鍵入運行 SQL 服務程序的服務器的名稱、登錄 ID 和密碼。
在“創建 SQL Server 的新數據源”對話框中,在“服務器”列表框中鍵入包含 SQL Server 數據庫的服務器的名稱,然後單擊“下一步”。
選擇驗證登錄 ID 的方式。
如果要選擇 SQL 服務器驗證,請輸入一個登錄 ID 和密碼,然後單擊“下一步”。
在“創建 SQL Server 的新數據源”對話框中,設置默認數據庫、存儲過程設置的驅動程序和 ANSI 標識,然後單擊“下一步”。(要獲取詳細信息,請單擊“幫助”。)
在對話框(同樣名為“創建 SQL Server 的新數據源”)中,選擇一種字符轉換方法,然後單擊“下一步”。 (詳細信息,請單擊“幫助”。)
在下一個對話框(同樣名為“創建 SQL Server 的新數據源”)中,選擇登錄設置。
注意 典型情況下, 您只能使用日志來調試數據庫訪問問題。

在“ODBC Microsoft SQL Server 安裝程序”對話框中,單擊“測試數據源”。如果 DSN 正確創建,“測試結果”對話框將指出測試成功完成。
SQL Server 連接和安全信息
如果您正在開發用於連接遠程 SQL Server 數據庫的 ASP 數據庫應用程序,應考慮以下問題:

連接方案- 您可以選擇 TCP/ip 套接字和命名管道的方法訪問遠程的 SQL Server 數據庫。當使用命名管道時,因為在建立連接之前,數據庫用戶必須被 Windows NT 確認,所以對只有適當的 SQL Server 訪問身份而在該計算機上沒有 Windows NT 用戶帳號的用戶可能會被拒絕訪問命名管道。作為一種替代方案,使用 TCP/IP 套接字的連接可直接連接到數據庫服務器,而不必通過使用命名管道的中間計算機。因為使用 TCP/IP 套接字連接可直接連接到數據庫 server,所以通過 SQL Server 的確認,用戶就可以獲得訪問權,而不必通過 Windows NT 的確認。
注意 在連接到遠程數據庫時使用 TCP/IP 套接字可提高性能。

安全性 - 如果您使用 SQL Server 的 集成 或 混合 安全特性,並且 SQL Server 數據庫位於遠程服務器上,則不能使用 Windows NT 請求/響應的確認。也就是說,不能將 Windows NT 請求/響應身份證轉發到遠程計算機上,而只能使用基本身份驗證,它根據用戶提供用戶名和口令信息進行。
有關這一主題的詳細信息,請參閱 http://www.microsoft.com/sqlsupport/default.htm
上的 Microsoft SQL Server 技術支持主頁。

 

配置 Oracle 數據庫文件 DSN

首先要確保 Oracle 用戶軟件被正確地安裝要創建 DSN 的計算機上。詳細信息,請與服務器管理員聯系或參閱數據庫軟件文檔。

在“創建新數據源”對話框中,從列表框中選擇“Microsoft ODBC for Oracle”,然後單擊“下一步”。
鍵入 DSN 文件的名稱,然後單擊“下一步”。
單擊“完成”創建數據源。
輸入用戶名、密碼和服務器名,然後單擊“確定”。
注意 DSN 文件用 .dsn 擴展名,位於 \Programs\Common Files\ODBC\Data Sources 目錄中。

有關創建 DSN 文件的詳細信息,請訪問 Microsoft ODBC Web 站點:http://microsoft.com/odbc/。

連接數據庫
訪問數據庫信息的第一步是和數據庫源建立連接。ADO 提供 Connection 對象,可以使用該對象建立和管理應用程序和 ODBC 數據庫之間的連接。Connection 對象具有各種屬性和方法,可以使用它們打開和關閉數據庫連接,並且發出查詢請求來更新信息。

要建立數據庫連接,首先應創建 Connection 對象的實例。例如,下面的腳本創建 Connection 對象,接著打開數據庫連接:


注意 無論在等號 (=) 之前還是之後,DSN 字符串都不能包含空格。

在這種情況下,Connection 對象的 Open 方法引用基於 DSN 的文件,其中包含關於數據庫的位置和配置信息。也可以不引用 DSN,直接顯式引用供應程序、數據源、用戶 ID 和密碼。

用 Connection 對象執行查詢
用 Connection 對象的 Execute 方法,您可以發出結構化查詢語言 (SQL) 查詢數據庫源並檢索結果。SQL 是用於與數據庫通訊的工業標准語言,它有許多命令可用來檢索和更新信息。

下面的腳本使用 Connection 對象的 Execute 方法在 SQL INSERT 命令的表格中發出查詢,該命令將數據插入特定的數據庫表格。在下面的示例中,腳本將名稱 Jose Lugo 插入名為 Customers 的數據庫表中。


注意 基於 DSN 路徑字符串的文件在等號(=)前後不應包含空格。

除了 SQL INSERT 命令以外,您也可以使用 SQL UPDATE 和 DELETE 命令更改和刪除數據庫信息。

用 SQL UPDATE 命令,您可以改變數據庫表中各項目值。下面的腳本使用 UPDATE 命令將 Customers 表中每個 LastName 字段包含姓 Smith 記錄的 FirstName 字段更改為 Jeff。


要想從數據庫表中刪除特定的記錄,可使用 SQL DELETE 命令。下面的腳本從 Customers 表中刪除了所有姓 Smith 的行:


注意 在使用 SQL DELETE 命令時,必須謹慎從事。當使用不帶 WHERE 子句的 DELETE 命令時,它將刪除表中的所有行。一定要包含 SQL WHERE 子句來指定要刪除的確切行。

使用 Recordset 對象處理結果
盡管 Connection 對象簡化了連接數據庫和查詢任務,但 Connection 對象仍有許多不足。確切地說,檢索和顯示數據庫信息的 Connection 對象不能用於創建腳本;您必須確切知道要對數據庫作出的更改,然後才能使用查詢實現更改。

對於檢索數據、檢查結果、更改數據庫,ADO 提供了 Recordset 對象。正如它的名稱所暗示的那樣,Recordset 對象有許多您可以使用的特性,根據您的查詢限制,檢索並且顯示一組數據庫行,即記錄。 Recordset 對象保持查詢返回的記錄的位置,允許您一次一項逐步掃描結果。

根據 Recordset 對象的指針類型屬性設置,您可以滾動和更新記錄。數據庫指針可以讓您在一組記錄中定位到特定的項。指針還用於檢索和檢查記錄,然後在這些記錄的基礎上執行操作。Recordset 對象有一些屬性,可用於精確地控制指針的行為,提高您檢查和更新結果的能力。例如,您可以使用 CursorType 和 CursorLocation 屬性設置指針的類型,將結果返回給客戶端應用程序(結果通常保留在數據庫服務器上)並顯示其他用戶對數據庫的最後一次更改。

檢索記錄
一個成功的數據庫應用程序都使用 Connection 對象建立鏈接並使用 Recordset 對象處理返回的數據。通過“協調”兩個對象的特定功能,您可以開發出幾乎可以執行任何數據處理任務的數據庫應用程序。例如,下面的服務器端腳本使用 Recordset 對象執行 SQL SELECT 命令。SELECT 命令檢索一組基於查詢限制的信息。查詢也包含 SQL WHERE 子句,用來縮小查詢的范圍。此例中,WHERE 子句將查詢限制為所有的 Customers 數據庫表中包含的姓 Smith 的記錄。


注意,在前面的例子中,用來建立數據庫連接的 Connection 對象和 Recordset 對象使用該連接從數據庫中檢索結果。當您需要精確地設置和數據庫建立鏈接所采用的方式時,這個方法是非常有用的。例如,如果您需要在連接嘗試失敗之前指定等待的時間,則需要使用 Connection 對象去設置屬性。但是,如果您僅僅想使用 ADO 默認的連接屬性建立連接,則應該使用 Recordset 對象的 Open 方法去建立鏈接:


當使用 Recordset 對象的 Open 方法建立一個連接時,必須使用 Connection 對象去保證鏈接的安全。

用 Command 對象改善查詢
通過 ADO Command 對象,可以象用 Connection 對象和 Recordset 對象那樣執行查詢,唯一的不同在於用 Command 對象您可以在數據庫源上准備、編譯您的查詢並且反復使用一組不同的值來發出查詢。這種方式的編譯查詢的優點是您可以最大程度地減少向現有查詢重復發出修改的請求所需的時間。另外,您還可以在執行之前通過您的查詢的可變部分的選項使 SQL 查詢保持局部未定義。

Command 對象的 parameter 集合減少了您的麻煩,使您不必在每次重新發出查詢時重新建立查詢。例如,如果需要有規律地更新基於庫存清單的 Web 系統中的供應和價格信息,可以用下面的方法預先定義查詢:


請檢查上面的例子,您將注意到,腳本用不同的數值重復構建和發出一個 SQL 查詢,而沒有重新定義和重發送查詢到數據庫源。用 Command 對象編譯查詢也可避免 SQL 查詢引起的合並字符串和表格變量問題。特別是,通過使用 Command 對象的 Parameter 集合可以避免與定義字符串、日期、時間變量的類型有關的問題。例如,包含“'”的 SQL 查詢值可能導致查詢失敗:

strSQL = "INSERT INTO Customers (FirstName, LastName) VALUES ('Robert','O'Hara')"
注意,姓 O'Hara 中包含一個“'”,它與在 SQL VALUES 關鍵字中用來表示數據的“'”沖突。通過將查詢數值作為 Command 對象參數綁定,可以避免此類問題。

結合 Html 表格和數據庫訪問
包含 Html 表格的 Web 頁可使用戶遠程查詢數據庫並且檢索特定的信息。用 ADO 您可以創建非常簡單的腳本來收集用戶表格信息、創建自定義的數據庫查詢以及將信息返回給用戶。使用 ASP Request 對象,您可以檢索輸入到 HTML 表格的信息並將這些信息合並到 SQL 語句中。例如,下面的腳本模塊將 Html 表格提供的信息插入表格中。此腳本用 Request 對象的 Form 集合收集用戶信息。


有關表格和使用 ASP Request 對象的詳細信息,請參閱 使用 Html 表格。

管理數據庫連接
設計一個能經得起考驗的 Web 數據庫應用程序(例如為幾千個客戶服務的聯機購物應用程序)的最大挑戰,在於如何合理地管理數據庫連接。打開並且保持數據庫連接,即使在沒有信息傳輸時,也會嚴重耗費數據庫服務器的資源並且可能會導致連接性問題。設計良好的 Web 數據庫應用程序將回收數據庫連接並能夠補償由於網絡堵塞造成的延遲。

使連接超時
活動的突然增長可能使數據庫服務器變得十分笨拙,大量增加建立數據庫連接的時間。結果是,過長的連接延時將降低數據庫的性能。

用 Connection 對象的 ConnectionTimeout,您可以限制放棄連接嘗試並發出錯誤消息之前應用程序等待的時間。例如,下面的腳本設置 ConnectionTimeout 屬性,在取消連接嘗試之前等待 20 秒:

Set cn = Server.CreateObject("ADODB.Connection")
cn.ConnectionTimeout = 20
cn.Open "FILEDSN=MyDatabase.dsn"

默認的 ConnectionTimeout 屬性是 30 秒。

注意 在將 ConnectionTimeout 屬性合並到數據庫應用程序之前,一定要確保連接提供程序和數據源支持該屬性。

共享連接
經常建立和中斷數據庫連接的 Web 數據庫應用程序可能會降低數據庫服務器的性能。ASP 支持用 ODBC 3.5 的共享特性有效管理連接。連接共享維持打開的數據庫連接並管理不同的用戶共享該連接,以維持其性能和減少空閒的連接數。對每一個連接請求,連接池首先確定池中是否存在空閒的連接。如果存在,連接池返回連接而不是建立到數據庫的新連接。

如果希望將 ODBC 驅動程序加入到連接共享中,則必須配置數據庫驅動程序並在 Windows NT 注冊表中設置驅動程序的 CPTimeout 屬性。當 ODBC 斷開連接時,連接被存入池中,而不是被斷開。CPTimeout 屬性決定在連接池中的連接保留的時間長度。如果在池中連接保留的時間比 CPTimeout 設置的時間長,則連接將被關閉並且從池中刪除。CPTimeout 的默認值是 60 秒。

您可以通過創建如下設置的注冊表鍵來有選擇地設置 CPTimeout 的屬性,從而啟用特定 ODBC 數據庫驅動程序的連接池:


\HKEY_LOCAL_MacHINE\SOFTWARE\ODBC\ODBCINST.INI\driver-name\CPTimeout = timeout
(REG_SZ, units are in seconds)

例如,下面的鍵將 SQL Server 驅動程序的連接池的超時設置定為 180 秒(3 分鐘)。

\HKEY_LOCAL_MacHINE\SOFTWARE\ODBC\ODBCINST.INI\SQL Server\CPTimeout = 180
注意 默認情況下,通過將 CPTimeout 設置為 60 秒,Web 服務器將激活 SQL Server 的連接池。

使用跨頁連接
盡管您可以通過存儲 ASP 的 application 對象的連接重復使用跨頁連接,但是,始終使連接保持打開是不必要的,也沒有充分利用連接池的優點。如果有許多用戶需要連接到同一個 ASP 數據庫應用程序,一個好方法就是,將跨頁連接字符串置於 ASP 的 Application 對象中,重復使用數據庫連接。例如,可以在 Global.asa 文件的 Application_OnStart 事件過程中指定連接字符串,如下面的腳本所示:


Application.lock
Application("ConnectionString") = "FILEDSN=MyDatabase.dsn"
Application.unlock

然後,在每一個訪問數據庫的 ASP 文件中寫入:


要想創建連接對象的實例,請使用以下腳本:

cn.Open Application("ConnectionString")
對於打開的連接,可以在頁尾寫入以下腳本,關閉連接:

cn.Close
在單個用戶需要重復使用跨頁連接的情況下,使用 session 對象連接比使用 Application 對象更好。

關閉連接
要想更好地使用連接池,就應盡快地關閉數據庫連接。默認情況下,當腳本執行完以後,連接將被終止。當不再需要連接時將其關閉,就可以減少對數據庫服務器的要求並可以使其他用戶能夠使用該連接。

可以使用 Connection 對象的 Close 方法終止 Connection 對象和數據庫之間的連接。下面的腳本打開連接,然後將其關閉:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved