ASP中使用ADO訪問資料來源

來源:互聯網
上載者:User

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) 查詢。(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 子句,以便明確指定要刪除的行。

使用 Recordset 對象處理結果
為了檢索資料、檢查結果和更改資料庫,ADO 提供了 Recordset 對象。正如名字所示,“Recordset”對象具有用來檢索和顯示資料庫行(或叫“記錄”)的功能,這取決於您的查詢約束條件。“Recordset”對象保留由查詢返回的每一條記錄的位置,這樣就能使您查看所有的結果,每次一條。

檢索記錄集
成功的 Web 資料應用程式既使用“Connection”對象來建立連結,又使用“Recordset”對象來處理返回的資料。通過綜合使用這兩種對象的一些特殊功能,開發出的資料庫應用程式幾乎可以執行所有的資料處理任務。例如,下面的伺服器端指令碼使用“Recordset”對象執行 SQL 的 SELECT 命令。此 SELECT 命令用來檢索基於查詢約束條件的資訊集。此查詢也包含 SQL WHERE 子句,用來將查詢限制到一個指定的標準。在本例中,WHERE 子句將查詢限制在 Customers 資料庫表中姓氏欄位包含 Smith 的所有記錄。

<%
'建立資料來源串連
strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Employees.mdb"
Set cnn = Server.CreateObject("ADODB.Connection")
cnn.Open strConnectionString

'例示 Recordset 對象
Set rstCustomers = Server.CreateObject("ADODB.Recordset")

'使用 Open 方法開啟記錄集
'並使用通過 Connection 對象建立的串連。
strSQL = "SELECT FirstName, LastName FROM Customers WHERE LastName = 'Smith' "
rstCustomers.Open strSQL, cnn

'遍曆記錄集和顯示結果
'並使用 MoveNext 方法遞增記錄位置。
Set objFirstName = rstCustomers("FirstName")
Set objLastName = rstCustomers("LastName")
Do Until rstCustomers.EOF
Response.Write objFirstName & " " & objLastName & "<BR>"
rstCustomers.MoveNext
Loop

%>
注意,在上例中,“Connection”對象建立資料庫連接,而“Recordset”對象使用同一串連從資料庫中檢索結果。當需要精確配置建立資料庫連結的方式時,該方法非常有用。例如,如果要指定在串連中止之前的時間延遲,可能需要使用“Connection”對象設定該屬性。但是,如果只想使用 ADO 的預設串連屬性建立串連,您可以使用“Recordset”對象的“Open”方法來建立連結:

<%
strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Employees.mdb"
strSQL = "SELECT FirstName, LastName FROM Customers WHERE LastName = 'Smith' "
Set rstCustomers = Server.CreateObject("ADODB.Recordset")

'使用 Open 方法開啟串連
'並使用通過 Connection 對象建立的串連。
rstCustomers.Open strSQL, strConnectionString

'遍曆記錄集,顯示結果,
'並使用 MoveNext 方法遞增記錄位置。
Set objFirstName = rstCustomers("FirstName")
Set objLastName = rstCustomers("LastName")
Do Until rstCustomers.EOF
Response.Write objFirstName & " " & objLastName & "<BR>"
rstCustomers.MoveNext
Loop
%>
當使用“Recordset”對象的“Open”方法來建立串連時,實際上正在隱含地使用“Connection”對象保護連結的安全。詳細資料,請參閱 Microsoft ActiveX 資料對象 (ADO) 文檔,可在 Microsoft Universal Data Access Web 網站 http://www.microsoft.com/data/ 上找到該文檔。

注意 要明顯提高 ASP 資料庫應用程式的效能,請考慮在“應用程式”狀態中快取記錄集。詳細資料,請參閱快取資料。

統計記錄集中返回的記錄數有時候很有用。“Recordset”對象的“Open”方法使您能夠指定可選的游標參數,以確定潛在提供者檢索和瀏覽記錄集的方法。通過給用來執行查詢的語句添加 adOpenKeyset 游標參數,可以使用戶端應用程式完全地瀏覽記錄集。因此,應用程式可使用 RecordCount 屬性精確地統計記錄集中的記錄數。請參看下面的樣本:

<%
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "SELECT * FROM NewOrders", "Provider=Microsoft.Jet.OLEDB.3.51;Data Source='C:\CustomerOrders\Orders.mdb'", adOpenKeyset, adLockOptimistic, adCmdText

'使用 Recordset 對象的 RecordCount 屬性進行統計。
If rs.RecordCount >= 5 then
 Response.Write "我們已經收到下面" & rs.RecordCount & "個新訂單<BR>"

 Do Until rs.EOF
  Response.Write rs("CustomerFirstName") & " " & rs("CustomerLastName") & "<BR>"
Response.Write rs("AccountNumber") & "<BR>"
Response.Write rs("Quantity") & "<BR>"
Response.Write rs("DeliveryDate") & "<BR><BR>"
    rs.MoveNext
 Loop

Else
 Response.Write "訂單數少於 " & rs.RecordCount & "。"
End If

rs.Close
%>
使用 Command 對象改善查詢
使用 ADO 的 Command 對象執行查詢的方式與使用“Connection”和“Recordset”對象執行查詢的方式一樣,但是使用“Command”對象可以準備(或編譯)對資料庫源的查詢,然後使用各種不同的值重複發送此查詢。用這種方法編譯查詢的好處在於,當您需要重新發布修改過的已有查詢時,可以大大地減少發布時間。另外,還可以留下部分 SQL 查詢不進行定義,用到了在執行之前改變查詢部分的選項。

“Command”對象的“Parameters”集合可以使您避免每次重新發布查詢時都要重建查詢的麻煩。例如,如果您需要定期更新基於 Web 的庫存系統的供應和費用資訊,就可以按照下面的方式預定義查詢:

<%
'使用 Connection 對象開啟串連注意,Command 對象
'並不具有用來建立串連的 Open 方法。
strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Inventory.mdb"
Set cnn = Server.CreateObject("ADODB.Connection")
cnn.Open strConnectionString

'例示 Command 對象;使用 ActiveConnection 屬性將
'串連附加到 Command 對象上。
Set cmn= Server.CreateObject("ADODB.Command")
Set cmn.ActiveConnection = cnn

'定義 SQL 查詢。
cmn.CommandText = "INSERT INTO Inventory (Material, Quantity) VALUES (?, ?)"

'在 Command 對象首次執行之前儲存在 CommandText 屬性
'中指定的查詢的預備(或先行編譯)版本。
cmn.Prepared = True

'定義查詢參數配置資訊。
cmn.Parameters.Append cmn.CreateParameter("material_type",adVarChar, ,255 )
cmn.Parameters.Append cmn.CreateParameter("quantity",adVarChar, ,255 )

'定義並執行第一個插入操作。
cmn("material_type") = "日光燈泡"
cmn("quantity") = "40"
cmn.Execute ,,adCmdText + adExecuteNoRecords

'定義並執行第二個插入操作。
cmn("material_type") = "保險絲"
cmn("quantity") = "600"
cmn.Execute ,,adCmdText + adExecuteNoRecords
  .
  .
  .
 %>
要點 ADO 參數(如 adCmdText)是一些簡單變數,這意味著在使用資料訪問指令碼中的 ADO 參數之前需要先定義參數值。由於 ADO 使用了大量的參數,因此通過“組件類型庫”來定義參數更容易些,組件類型庫是包含所有 ADO 參數和常量定義的檔案。有關實施 ADO 類型庫的詳細資料,請參閱使用變數和常量主題中的使用常量部分。

在上例中,您將注意到指令碼使用不同的值重複構建和重新發布 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”集合來收集使用者資訊。

<%
'使用 Connection 對象開啟串連Command 對象
'並不具有用來建立串連的 Open 方法。
strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\CompanyCatalog\Seeds.mdb"
Set cnn = Server.CreateObject("ADODB.Connection")
cnn.Open strConnectionString

'例示 Command 對象
'並使用 ActiveConnection 屬性附加對象
'串連附加到 Command 對象上。
Set cmn= Server.CreateObject("ADODB.Command")
Set cmn.ActiveConnection = cnn

'定義 SQL 查詢。
cmn.CommandText = "INSERT INTO MySeedsTable (Type) VALUES (?)"

'定義查詢參數配置資訊。
cmn.Parameters.Append cmn.CreateParameter("type",adVarChar, ,255)

'指派輸入值並執行更新。
cmn("type") = Request.Form("SeedType")
cmn.Execute ,,adCmdText + adExecuteNoRecords
%>
有關表單和使用 ASP“Request”對象的詳細資料,請參閱處理使用者輸入。

管理資料庫串連
設計完善的 Web 資料庫應用程式(如服務成千上萬個客戶的聯機訂購輸入應用程式)的一個主要挑戰就是如何正確管理資料庫串連。開啟並維護資料庫連接,尤其是當沒有資訊傳輸時也要開啟和維護,會嚴重消耗資料庫伺服器的資源並導致串連性問題。設計良好的 Web 資料庫應用程式可重複利用資料庫連接並補償因網路通訊量導致的延遲。

逾時串連
資料庫伺服器當活動突然激增時會產生積壓,同時大大增加建立資料庫連接所需的時間。因此,過多的串連延遲會降低資料庫應用程式的效能。

使用“Connection”對象的“ConnectionTimeout”可以限制應用程式在放棄串連嘗試並發布錯誤訊息之前等待的時間數。例如,下面的指令碼將“ConnectionTimeout”屬性設定為在取消串連嘗試之前等待 20 秒。

Set cnn = Server.CreateObject("ADODB.Connection")
cnn.ConnectionTimeout = 20
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Inventory.mdb"

“ConnectionTimeout”屬性預設為 30 秒。

注意 在將“ConnectionTimeout”屬性併入資料庫應用程式之前,請確保您的串連提供者和資料來源支援該屬性。

共用串連
串連池可使您的 Web 應用程式使用“池”中的串連,“池”指的是包含許多不需要重建立立的自由串連的容器。建立串連並放入串連池中後,應用程式可以重複使用該串連而不必執行串連進程。這可明顯地提高效能,特別是在應用程式通過網路連接或需要重複串連和斷開的情況下更是如此。另外,共用的串連可被多個應用程式重複使用。

OLE DB 會話池
OLE DB 具有一個共用特性,稱為“會話池”,用來提高大型 Web 資料庫應用程式的活動效能。會話池保護串連安全和一些其他屬性。共用的串連只在串連兩端提出匹配的請求時才可重新使用。預設情況下,Microsoft SQL server 和 Oracle 的 OLE DB 提供者支援會話池。這意味著並不需要配置應用程式、伺服器或資料庫即可使用會話池。然而,如果提供者預設情況下不支援會話池,則需要建立註冊表設定以啟用會話池。關於會話池的詳細資料,請參閱 OLE DB 2.0 Software Development Kit (SDK) 文檔。

ODBC 串連池
如果希望 ODBC 驅動程式分享串連池,您必須配置特定的資料庫驅動程式,然後在 Windows 註冊表中設定驅動程式的“CPTimeout”屬性。“CPTimeout”屬性確定串連在串連池中保留的時間長度。如果串連在池中保留的時間超過“CPTimeout”設定的期間,串連將關閉並從池中刪除。“CPTimeout”的預設值是 60 秒。

通過建立帶有下面設定的註冊表索引值,您可以有選擇地設定“CPTimeout”屬性以啟用特定 ODBC 資料庫驅動程式的串連池:

\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\driver-name\CPTimeout = 逾時數
(REG_SZ, 以秒為單位)

例如,下面的索引值將 SQL Server 驅動程式的串連池逾時設定為 180 秒(3 分鐘)。

\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\SQL Server\CPTimeout = 180
注意 預設情況下,Web 服務器啟用 SQL Server 的串連池並將“CPTimeout”設定為 60 秒。

使用跨多頁的串連
雖然可以通過將串連儲存在 ASP 的“Application”對象中來重複使用跨多頁的串連,但這樣做可能導致不必要地保持開啟的串連,並且可能損害使用串連池的優勢。如果有許多使用者需要串連到同一 ASP 應用程式,一種更好的方法是重複使用跨多個 Web 頁的資料庫連接字串,只需將字串放置到 ASP 的“Application”對象中即可。例如,您可以在 Global.asa 檔案的 Application_OnStart 事件程序中指定連接字串,如下面的指令碼所示:

Application("ConnectionString") = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Inventory.mdb"

然後在每一個訪問資料庫的 ASP 檔案中,寫入

<OBJECT RUNAT=SERVER ID=cnn PROGID="ADODB.Connection"></OBJECT>
以建立該頁的連線物件執行個體,並使用指令碼

cnn.Open Application("ConnectionString")
開啟該串連。要關閉串連,在該頁的末尾可以使用

cnn.Close
在個別使用者需要重複使用跨多個 Web 頁串連的情況下,您將發現使用“Session”對象儲存連接字串比使用“Application”對象更具優勢。

關閉串連
要充分利用串連池,請儘可能顯式關閉資料庫連接。預設情況下,串連在指令碼執行完後終止。然而,通過顯式關閉指令碼已不再需要的串連,您可以減少對資料庫伺服器的要求,並使得其他使用者可以使用該串連。

可以使用“Connection”對象的“Close”方法顯式終止“Connection”對象和資料庫之間的串連。下面的指令碼將開啟和關閉串連:

<%
strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Inventory.mdb"
Set cnn = Server.CreateObject("ADODB.Connection")
cnn.Open strConnectionString
cnn.Close
%>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.