一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

ASP技術(shù)文章-訪問數(shù)據(jù)源

 whli88 2007-10-05
訪問數(shù)據(jù)源

本文作者:不詳
所屬分類:ASP入門(微軟版)
加入時間:2004-3-15
點(diǎn)擊次數(shù):7014


ActiveX 數(shù)據(jù)對象 (ADO) 是一種既易于使用又可擴(kuò)充的技術(shù),用來將數(shù)據(jù)庫訪問添加到您的 Web 頁可以使用 ADO 編寫簡潔和可升級的腳本以連接到與 OLE DB 兼容的數(shù)據(jù)源,如數(shù)據(jù)庫、電子表格、順序數(shù)據(jù)文件或電子郵件目錄。OLE DB 是一個系統(tǒng)級的編程接口,它提供一套標(biāo)準(zhǔn)的 COM 接口,用來展示數(shù)據(jù)庫管理系統(tǒng)的功能。使用 ADO 的對象模型,您可以輕松地(使用 VBScript 或 JScript 等腳本語言)訪問這些接口并將數(shù)據(jù)庫功能添加到您的 Web 應(yīng)用程序中。另外,您還可以使用 ADO 訪問與開放式數(shù)據(jù)庫互連 (ODBC) 兼容的數(shù)據(jù)庫。

 

如果您是一位對數(shù)據(jù)庫互連知識有一定了解的腳本編寫者,您將會發(fā)現(xiàn) ADO 的命令語法很簡單,而且很容易使用。如果您是一位經(jīng)驗(yàn)豐富的開發(fā)人員,您將會非常欣賞 ADO 提供的這種可升級的對各種數(shù)據(jù)源的高性能訪問。

關(guān)于 ADO 的詳細(xì)信息,請訪問 Microsoft 通用數(shù)據(jù)訪問 (UDA) Web 站點(diǎn) http://www.microsoft.com/data/。

創(chuàng)建連接字符串
創(chuàng)建 Web 應(yīng)用程序的第一步是給 ADO 提供一種定位并識別數(shù)據(jù)源的方法。這是通過“連接字符串”來完成的,連接字符串是一系列用分號分隔的參數(shù),用來定義諸如數(shù)據(jù)源提供者和數(shù)據(jù)源位置等參數(shù)。ADO 使用連接字符串來識別 OLE DB “提供者”并將提供者指向數(shù)據(jù)源。提供者是一個組件,用來描述數(shù)據(jù)源并以行集合的形式將信息展示給應(yīng)用程序。

下表列出了幾個通用數(shù)據(jù)源的 OLE DB 連接字符串:

數(shù)據(jù)源 OLE DB 連接字符串
Microsoft Access Provider=Microsoft.Jet.OLEDB.4.0;Source=指向 .mdb 文件的物理路徑
Microsoft SQL Server Provider=SQLOLEDB.1;Source=指向服務(wù)器上數(shù)據(jù)庫的路徑
Oracle Provider=MSDAORA.1;Source=指向服務(wù)器上數(shù)據(jù)庫的路徑
Microsoft Indexing Service Provider=MSIDXS.1;Source=指向文件的路徑

為了提供向后兼容,ODBC 的 OLE DB 提供者支持 ODBC 連接字符串語法。下表列出了通常使用的 ODBC 連接字符串:

數(shù)據(jù)源驅(qū)動程序 ODBC 連接字符串
Microsoft Access Driver={Microsoft Access Driver (*.mdb)};DBQ=指向 .mdb 文件的物理路徑
SQL Serverr Driver={SQL Server};SERVER=指向服務(wù)器的路徑
Oracle Driver={Microsoft ODBC for Oracle};SERVER=指向服務(wù)器的路徑
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®(帶有一個數(shù)據(jù)庫容器) Driver={Microsoft Visual FoxPro Driver};SourceType=DBC;SourceDb=指向 .dbc 文件的物理路徑
Microsoft Visual FoxPro(不帶數(shù)據(jù)庫容器) Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDb=指向 .dbf 文件的物理路徑


注意 (使用 UNC 路徑引用位于遠(yuǎn)程計算機(jī)上的數(shù)據(jù)源的)連接字符串可能造成潛在的安全問題。要禁止對您的數(shù)據(jù)源進(jìn)行未授權(quán)訪問,可為需要訪問數(shù)據(jù)的計算機(jī)創(chuàng)建 Windows 賬號,然后對數(shù)據(jù)源應(yīng)用適當(dāng)?shù)?NTFS 權(quán)限。詳細(xì)信息,請參閱使用 NTFS 保護(hù)文件。

設(shè)計 Web 數(shù)據(jù)應(yīng)用程序時應(yīng)考慮的高級問題
由于性能和可靠性的原因,我們強(qiáng)烈推薦,在配置數(shù)據(jù)驅(qū)動 Web 應(yīng)用程序(需要能滿足大約 10 個以上并發(fā)用戶同時進(jìn)行高要求的訪問)時,使用客戶端服務(wù)器數(shù)據(jù)庫引擎。雖然 ADO 適用于與 OLE DB 兼容的任何數(shù)據(jù)源,但經(jīng)過廣泛的測試,主要設(shè)計為與客戶端服務(wù)器數(shù)據(jù)庫(如 Microsoft SQL Server 或 Oracle)一起工作。

ASP 支持共享文件數(shù)據(jù)庫(Microsoft Access 或 Microsoft FoxPro)作為有效的數(shù)據(jù)源。雖然在 ASP 文檔中有些示例使用了“共享文件”數(shù)據(jù)庫,但我們還是建議這些類型的數(shù)據(jù)庫引擎只用于開發(fā)目的或有限的開發(fā)方案中。共享文件數(shù)據(jù)庫可能不如客戶端服務(wù)器數(shù)據(jù)庫更適合于高要求和高質(zhì)量的 Web 應(yīng)用程序。

如果正在開發(fā) ASP 數(shù)據(jù)庫應(yīng)用程序,并且該程序?qū)⑦B接到遠(yuǎn)程 SQL Server 數(shù)據(jù)庫,您還應(yīng)該注意以下幾點(diǎn):

選擇 SQL Server 連接方案 要訪問遠(yuǎn)程 SQL Server 數(shù)據(jù)庫,可以選擇 TCP/IP 套接字方法或已命名管道方法。使用已命名管道,必須在建立連接之前由 Windows 對數(shù)據(jù)庫客戶加以驗(yàn)證,以防止運(yùn)行已命名管道的遠(yuǎn)程計算機(jī)拒絕那些在該計算機(jī)上具有適當(dāng) SQL Server 訪問證書、但沒有 Windows 用戶賬號的用戶的訪問。作為另一個選擇,使用 TCP/IP 套接字的連接將直接連到數(shù)據(jù)庫服務(wù)器,而不通過中間計算機(jī)進(jìn)行連接。如果通過中間計算機(jī),則與使用已命名管道類似。而且由于使用 TCP/IP 套接字的連接會直接連到數(shù)據(jù)庫服務(wù)器,所以用戶可以通過 SQL Server 驗(yàn)證而不是 Windows 驗(yàn)證來獲得訪問。
ODBC 80004005 錯誤 如果訪問 SQL Server 的連接方案沒有正確設(shè)置,則正在查看數(shù)據(jù)庫應(yīng)用程序的用戶可能會收到 ODBC 80004005 錯誤的消息。要糾正這種情況,可使用本地的已命名管道連接代替網(wǎng)絡(luò)的已命名管道連接,但 SQL Server 與 IIS 需在同一計算機(jī)上運(yùn)行。Windows 2000 安全規(guī)則不會受到影響,因?yàn)榇斯艿朗潜镜剡B接而不是網(wǎng)絡(luò)連接,它可以由匿名用戶賬號來模擬。同樣,在 SQL Server 連接字符串(在 Global.asa 文件或網(wǎng)頁級腳本中)中,將參數(shù) SERVER=server name 更改為 SERVER=(local)。關(guān)鍵字 (local) 是由 SQL Server ODBC 驅(qū)動程序識別的特殊參數(shù)。如果該解決方案無法工作,那么請在 IIS 和 SQL Server 之間嘗試使用非驗(yàn)證協(xié)議,如 TCP/IP 套接字。當(dāng) SQL Server 在本地或遠(yuǎn)程計算機(jī)上運(yùn)行時,該協(xié)議將能夠工作。
注意 為了在連接到遠(yuǎn)程數(shù)據(jù)庫時提高性能,請使用 TCP/IP 套接字。

SQL Server 安全 如果使用 SQL Server 的“集成”或“混合”安全特性,并且 SQL Server 數(shù)據(jù)庫駐留在遠(yuǎn)程服務(wù)器上,那么您將無法使用集成的 Windows 驗(yàn)證。特別地,您無法將集成的 Windows 驗(yàn)證證書發(fā)送給遠(yuǎn)程計算機(jī)。這意味著您不得不使用基本驗(yàn)證,該驗(yàn)證需要用戶提供用戶名和密碼信息。
有關(guān)這些問題的詳細(xì)信息,請訪問位于 http://www.microsoft.com/china/support/ 的 Microsoft 產(chǎn)品支持服務(wù) Web 站點(diǎn)。

連接到數(shù)據(jù)源
ADO 提供了“Connection”對象,用于建立與管理應(yīng)用程序和 OLE DB 兼容數(shù)據(jù)源或 ODBC 兼容數(shù)據(jù)庫之間的連接。“Connection”對象的屬性和方法可以用來打開和關(guān)閉數(shù)據(jù)庫連接,并發(fā)布對更新信息的查詢。

要建立數(shù)據(jù)庫連接,首先必須創(chuàng)建“Connection”對象實(shí)例。例如,下面的腳本創(chuàng)建“Connection”對象實(shí)例,接著打開一個連接:

<%
'創(chuàng)建 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 對象執(zhí)行 SQL 查詢
使用“Connection”對象的“Execute”方法可以將命令發(fā)布到數(shù)據(jù)源,如結(jié)構(gòu)化查詢語言 (SQL) 查詢。(SQL 是與數(shù)據(jù)庫進(jìn)行通信的工業(yè)標(biāo)準(zhǔn)語言,定義了用來檢索和更新信息的命令。)“Execute”方法可以接收參數(shù),用來指定命令(或查詢)、受影響的數(shù)據(jù)記錄數(shù)和所使用命令的類型。

下面腳本使用“Execute”方法以 SQL “INSERT”命令的形式發(fā)布查詢,該命令用來將數(shù)據(jù)插入指定的數(shù)據(jù)庫表中。在這種情況下,腳本塊將名字“Jose Lugo”插入到名為“Customers”的數(shù)據(jù)庫表中。

<%
'定義 OLE DB 連接字符串。
strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Employees.mdb"

'例示 Connection 對象并打開數(shù)據(jù)庫連接。
Set cnn = Server.CreateObject("ADODB.Connection")
cnn.Open strConnectionString

'定義 SQL SELECT 語句。
strSQL = "INSERT INTO Customers (FirstName, LastName) VALUES ('Jose','Lugo')"

'使用 Execute 方法將 SQL 查詢發(fā)布到數(shù)據(jù)庫。
cnn.Execute strSQL,,adCmdText + adExecuteNoRecords
%>
注意,在用來執(zhí)行查詢的語句中指定了兩個參數(shù):adCmdText 和 adExecuteNoRecords??蛇x參數(shù) adCmdText 指定命令類型,說明提供者必須將此查詢語句(這里是 SQL 查詢語句)評估為命令的文本定義。adExecuteNoRecords 參數(shù)指示 ADO 在沒有結(jié)果返回到應(yīng)用程序時不要創(chuàng)建數(shù)據(jù)記錄集。此參數(shù)只用于定義為文本定義(如 SQL 查詢)的命令類型,或已存儲的數(shù)據(jù)庫過程。雖然 adCmdText 和 adExecuteNoRecords 是可選參數(shù),但在使用“Execute”方法增強(qiáng)數(shù)據(jù)應(yīng)用程序性能時應(yīng)指定這兩個參數(shù)。

要點(diǎn) ADO 參數(shù),如 adCmdText,需要在腳本中先定義然后再使用。一個方便的定義參數(shù)的方法是使用“組件類型庫”,它是包含所有 ADO 參數(shù)定義的文件。要實(shí)施組件類型庫,首先應(yīng)聲明它。將下面的 <METADATA> 標(biāo)記添加到 .asp 文件或 Global.asa 文件中以聲明 ADO 類型庫:

<!--METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library" TYPE="TypeLib" UUID="{00000205-0000-0010-8000-00AA006D2EA4}"-->
有關(guān)實(shí)施組件類型庫的詳細(xì)信息,請參閱使用變量和常量主題中的使用常量部分。

除了 SQL 的 INSERT 命令外,還可以使用 SQL 的 UPDATE 和 DELETE 命令來更改和刪除數(shù)據(jù)庫信息。

使用 SQL 的 UPDATE 命令可以更改數(shù)據(jù)庫表中各個項目的值。下面的腳本使用 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
%>
要刪除數(shù)據(jù)庫表中指定的記錄,可使用 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 命令時務(wù)必小心謹(jǐn)慎。不帶 WHERE 子句的 DELETE 命令將刪除表中的所有行。確保包括 SQL WHERE 子句,以便明確指定要刪除的行。

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

檢索記錄集
成功的 Web 數(shù)據(jù)應(yīng)用程序既使用“Connection”對象來建立鏈接,又使用“Recordset”對象來處理返回的數(shù)據(jù)。通過綜合使用這兩種對象的一些特殊功能,開發(fā)出的數(shù)據(jù)庫應(yīng)用程序幾乎可以執(zhí)行所有的數(shù)據(jù)處理任務(wù)。例如,下面的服務(wù)器端腳本使用“Recordset”對象執(zhí)行 SQL 的 SELECT 命令。此 SELECT 命令用來檢索基于查詢約束條件的信息集。此查詢也包含 SQL WHERE 子句,用來將查詢限制到一個指定的標(biāo)準(zhǔn)。在本例中,WHERE 子句將查詢限制在 Customers 數(shù)據(jù)庫表中姓氏字段包含 Smith 的所有記錄。

<%
'建立數(shù)據(jù)源連接
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

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

%>
注意,在上例中,“Connection”對象建立數(shù)據(jù)庫連接,而“Recordset”對象使用同一連接從數(shù)據(jù)庫中檢索結(jié)果。當(dāng)需要精確配置建立數(shù)據(jù)庫鏈接的方式時,該方法非常有用。例如,如果要指定在連接中止之前的時間延遲,可能需要使用“Connection”對象設(shè)置該屬性。但是,如果只想使用 ADO 的默認(rèn)連接屬性建立連接,您可以使用“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

'遍歷記錄集,顯示結(jié)果,
'并使用 MoveNext 方法遞增記錄位置。
Set objFirstName = rstCustomers("FirstName")
Set objLastName = rstCustomers("LastName")
Do Until rstCustomers.EOF
Response.Write objFirstName & " " & objLastName & "<BR>"
rstCustomers.MoveNext
Loop
%>
當(dāng)使用“Recordset”對象的“Open”方法來建立連接時,實(shí)際上正在隱含地使用“Connection”對象保護(hù)鏈接的安全。詳細(xì)信息,請參閱 Microsoft ActiveX 數(shù)據(jù)對象 (ADO) 文檔,可在 Microsoft Universal Data Access Web 站點(diǎn) http://www.microsoft.com/data/ 上找到該文檔。

注意 要明顯提高 ASP 數(shù)據(jù)庫應(yīng)用程序的性能,請考慮在“應(yīng)用程序”狀態(tài)中高速緩存記錄集。詳細(xì)信息,請參閱高速緩存數(shù)據(jù)。

統(tǒng)計記錄集中返回的記錄數(shù)有時候很有用。“Recordset”對象的“Open”方法使您能夠指定可選的光標(biāo)參數(shù),以確定潛在提供者檢索和瀏覽記錄集的方法。通過給用來執(zhí)行查詢的語句添加 adOpenKeyset 光標(biāo)參數(shù),可以使客戶端應(yīng)用程序完全地瀏覽記錄集。因此,應(yīng)用程序可使用 RecordCount 屬性精確地統(tǒng)計記錄集中的記錄數(shù)。請參看下面的示例:

<%
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 屬性進(jìn)行統(tǒng)計。
If rs.RecordCount >= 5 then
 Response.Write "我們已經(jīng)收到下面" & 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 "訂單數(shù)少于 " & rs.RecordCount & "。"
End If

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

“Command”對象的“Parameters”集合可以使您避免每次重新發(fā)布查詢時都要重建查詢的麻煩。例如,如果您需要定期更新基于 Web 的庫存系統(tǒng)的供應(yīng)和費(fèi)用信息,就可以按照下面的方式預(yù)定義查詢:

<%
'使用 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 對象首次執(zhí)行之前保存在 CommandText 屬性
'中指定的查詢的預(yù)備(或預(yù)編譯)版本。
cmn.Prepared = True

'定義查詢參數(shù)配置信息。
cmn.Parameters.Append cmn.CreateParameter("material_type",adVarChar, ,255 )
cmn.Parameters.Append cmn.CreateParameter("quantity",adVarChar, ,255 )

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

'定義并執(zhí)行第二個插入操作。
cmn("material_type") = "保險絲"
cmn("quantity") = "600"
cmn.Execute ,,adCmdText + adExecuteNoRecords
  .
  .
  .
 %>
要點(diǎn) ADO 參數(shù)(如 adCmdText)是一些簡單變量,這意味著在使用數(shù)據(jù)訪問腳本中的 ADO 參數(shù)之前需要先定義參數(shù)值。由于 ADO 使用了大量的參數(shù),因此通過“組件類型庫”來定義參數(shù)更容易些,組件類型庫是包含所有 ADO 參數(shù)和常量定義的文件。有關(guān)實(shí)施 ADO 類型庫的詳細(xì)信息,請參閱使用變量和常量主題中的使用常量部分。

在上例中,您將注意到腳本使用不同的值重復(fù)構(gòu)建和重新發(fā)布 SQL 查詢,但并沒有重新定義并重新發(fā)送查詢到數(shù)據(jù)庫源中。使用“Command”命令編譯查詢也有如下優(yōu)點(diǎn):可避免當(dāng)將字符串和變量連接成 SQL 查詢時引起問題。特別地,使用“Command”對象的“Parameter”集合,您可以避免那些與定義特定類型字符串、日期和時間變量相關(guān)的問題。例如,包含單引號 (') 的 SQL 查詢值可能導(dǎo)致查詢失?。?

 strSQL = "INSERT INTO Customers (FirstName, LastName) VALUES ('Robert','O'Hara')"
注意,姓氏“O'Hara”包含一個單引號,這與用來表示 SQL VALUES 關(guān)鍵字中數(shù)據(jù)的單引號沖突。通過將查詢值約束為“Command”對象參數(shù)可以避免此類問題。

合并 HTML 表單和數(shù)據(jù)庫訪問
包含 HTML 表單的 Web 頁可允許用戶遠(yuǎn)程查詢數(shù)據(jù)庫并檢索指定的信息。使用 ADO 您可以創(chuàng)建出非常簡單的用來收集用戶表單信息的腳本、創(chuàng)建自定義的數(shù)據(jù)庫查詢并將信息返回給用戶。使用 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 (?)"

'定義查詢參數(shù)配置信息。
cmn.Parameters.Append cmn.CreateParameter("type",adVarChar, ,255)

'指派輸入值并執(zhí)行更新。
cmn("type") = Request.Form("SeedType")
cmn.Execute ,,adCmdText + adExecuteNoRecords
%>
有關(guān)表單和使用 ASP“Request”對象的詳細(xì)信息,請參閱處理用戶輸入。

管理數(shù)據(jù)庫連接
設(shè)計完善的 Web 數(shù)據(jù)庫應(yīng)用程序(如服務(wù)成千上萬個客戶的聯(lián)機(jī)訂購輸入應(yīng)用程序)的一個主要挑戰(zhàn)就是如何正確管理數(shù)據(jù)庫連接。打開并維護(hù)數(shù)據(jù)庫連接,尤其是當(dāng)沒有信息傳輸時也要打開和維護(hù),會嚴(yán)重消耗數(shù)據(jù)庫服務(wù)器的資源并導(dǎo)致連接性問題。設(shè)計良好的 Web 數(shù)據(jù)庫應(yīng)用程序可重復(fù)利用數(shù)據(jù)庫連接并補(bǔ)償因網(wǎng)絡(luò)通信量導(dǎo)致的延遲。

超時連接
數(shù)據(jù)庫服務(wù)器當(dāng)活動突然激增時會產(chǎn)生積壓,同時大大增加建立數(shù)據(jù)庫連接所需的時間。因此,過多的連接延遲會降低數(shù)據(jù)庫應(yīng)用程序的性能。

使用“Connection”對象的“ConnectionTimeout”可以限制應(yīng)用程序在放棄連接嘗試并發(fā)布錯誤消息之前等待的時間數(shù)。例如,下面的腳本將“ConnectionTimeout”屬性設(shè)置為在取消連接嘗試之前等待 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”屬性默認(rèn)為 30 秒。

注意 在將“ConnectionTimeout”屬性并入數(shù)據(jù)庫應(yīng)用程序之前,請確保您的連接提供者和數(shù)據(jù)源支持該屬性。

共用連接
連接池可使您的 Web 應(yīng)用程序使用“池”中的連接,“池”指的是包含許多不需要重新建立的自由連接的容器。創(chuàng)建連接并放入連接池中后,應(yīng)用程序可以重復(fù)使用該連接而不必執(zhí)行連接進(jìn)程。這可明顯地提高性能,特別是在應(yīng)用程序通過網(wǎng)絡(luò)連接或需要重復(fù)連接和斷開的情況下更是如此。另外,共用的連接可被多個應(yīng)用程序重復(fù)使用。

OLE DB 會話池
OLE DB 具有一個共用特性,稱為“會話池”,用來提高大型 Web 數(shù)據(jù)庫應(yīng)用程序的活動性能。會話池保護(hù)連接安全和一些其他屬性。共用的連接只在連接兩端提出匹配的請求時才可重新使用。默認(rèn)情況下,Microsoft SQL server 和 Oracle 的 OLE DB 提供者支持會話池。這意味著并不需要配置應(yīng)用程序、服務(wù)器或數(shù)據(jù)庫即可使用會話池。然而,如果提供者默認(rèn)情況下不支持會話池,則需要創(chuàng)建注冊表設(shè)置以啟用會話池。關(guān)于會話池的詳細(xì)信息,請參閱 OLE DB 2.0 Software Development Kit (SDK) 文檔。

ODBC 連接池
如果希望 ODBC 驅(qū)動程序分享連接池,您必須配置特定的數(shù)據(jù)庫驅(qū)動程序,然后在 Windows 注冊表中設(shè)置驅(qū)動程序的“CPTimeout”屬性。“CPTimeout”屬性確定連接在連接池中保留的時間長度。如果連接在池中保留的時間超過“CPTimeout”設(shè)置的持續(xù)時間,連接將關(guān)閉并從池中刪除。“CPTimeout”的默認(rèn)值是 60 秒。

通過創(chuàng)建帶有下面設(shè)置的注冊表鍵值,您可以有選擇地設(shè)置“CPTimeout”屬性以啟用特定 ODBC 數(shù)據(jù)庫驅(qū)動程序的連接池:

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

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

\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\SQL Server\CPTimeout = 180
注意 默認(rèn)情況下,Web 服務(wù)器激活 SQL Server 的連接池并將“CPTimeout”設(shè)置為 60 秒。

使用跨多頁的連接
雖然可以通過將連接儲存在 ASP 的“Application”對象中來重復(fù)使用跨多頁的連接,但這樣做可能導(dǎo)致不必要地保持打開的連接,并且可能損害使用連接池的優(yōu)勢。如果有許多用戶需要連接到同一 ASP 應(yīng)用程序,一種更好的方法是重復(fù)使用跨多個 Web 頁的數(shù)據(jù)庫連接字符串,只需將字符串放置到 ASP 的“Application”對象中即可。例如,您可以在 Global.asa 文件的 Application_OnStart 事件過程中指定連接字符串,如下面的腳本所示:

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

然后在每一個訪問數(shù)據(jù)庫的 ASP 文件中,寫入

<OBJECT RUNAT=SERVER ID=cnn PROGID="ADODB.Connection"></OBJECT>
以創(chuàng)建該頁的連接對象實(shí)例,并使用腳本

cnn.Open Application("ConnectionString")
打開該連接。要關(guān)閉連接,在該頁的末尾可以使用

cnn.Close
在個別用戶需要重復(fù)使用跨多個 Web 頁連接的情況下,您將發(fā)現(xiàn)使用“Session”對象儲存連接字符串比使用“Application”對象更具優(yōu)勢。

關(guān)閉連接
要充分利用連接池,請盡可能顯式關(guān)閉數(shù)據(jù)庫連接。默認(rèn)情況下,連接在腳本執(zhí)行完后終止。然而,通過顯式關(guān)閉腳本已不再需要的連接,您可以減少對數(shù)據(jù)庫服務(wù)器的要求,并使得其他用戶可以使用該連接。

可以使用“Connection”對象的“Close”方法顯式終止“Connection”對象和數(shù)據(jù)庫之間的連接。下面的腳本將打開和關(guān)閉連接:

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

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    麻豆视传媒短视频在线看| 男人的天堂的视频东京热| 久久精品国产第一区二区三区| 狠狠干狠狠操在线播放| 中文字幕日韩无套内射| 能在线看的视频你懂的| 男人大臿蕉香蕉大视频| 国产亚洲中文日韩欧美综合网| 国产精品一区二区丝袜| 又黄又爽禁片视频在线观看| 日本 一区二区 在线| 日本久久精品在线观看| 美日韩一区二区精品系列| 亚洲国产黄色精品在线观看| 成人精品一区二区三区综合| 东京热男人的天堂一二三区| 亚洲色图欧美另类人妻| 欧美整片精品日韩综合| 久草热视频这里只有精品| 国产精品人妻熟女毛片av久| 伊人天堂午夜精品草草网| 日本加勒比系列在线播放| 五月婷婷综合缴情六月| 大香蕉久草网一区二区三区| 婷婷色香五月综合激激情| 国产女高清在线看免费观看| 在线懂色一区二区三区精品| 国产精品一区二区三区日韩av| 隔壁的日本人妻中文字幕版| 狠狠做深爱婷婷久久综合| 麻豆视传媒短视频免费观看| 久久久免费精品人妻一区二区三区| 国产麻豆一线二线三线| 美女被草的视频在线观看| 免费观看一区二区三区黄片| 日本理论片午夜在线观看| 欧美av人人妻av人人爽蜜桃 | 免费精品一区二区三区| 精品高清美女精品国产区| 草草视频精品在线观看| 日韩女优视频国产一区|