ASP入門(二十三)- 數據庫插入、更新和刪除操作


我們這里介紹如何使用 Recordset 對象進行插入、更新和刪除操作,順便和 SQL 語句對比。

插入記錄

AddNew 方法用於插入一條記錄,首先打開一個記錄集,並且這個記錄具備可寫特性,而后調用 AddNew 方法告訴 ADO 要插入一條記錄,而后分別設置各個字段的值,最后調用 Update 方法將插入的記錄生效。

還是直接看具體代碼和注釋吧(AddNew.asp),如下:

<!--#include file="../include/conn.asp"-->
<%
Dim oRs, sql
sql = "SELECT * FROM [產品]"
Set oRs = Server.CreateObject("ADODB.Recordset")
oRs.Open sql, oConn, 1, 3  '這個3表示可修改
'調用 AddNew 准備插入記錄
oRs.AddNew()
oRs("產品名稱") = "巧克力面包"
oRs("供應商ID") = 8
oRS("類別ID") = 3 
oRS("單位數量") = "" 
oRS("單價") = 5
oRS("庫存量") = 150 
oRS("訂購量") = 50 
oRS("再訂購量") = 25
oRS("中止") = False
oRs.Update
oRs.Close
Set oRs = Nothing
'/////////////////////////////////////////////////
'SQL 版本的插入執行
Dim RA
sql = "INSERT INTO 產品 ( 產品名稱, 供應商ID, 類別ID, 單位數量, 單價, 庫存量, 訂購量, 再訂購量, 中止 ) VALUES ('奶油面包', 8, 3, '個', 3, 200, 50, 25, False)"
oConn.Execute sql, RA
If RA <> 0 Then
  Response.Write("插入記錄成功")
End If
oConn.Close
Set oConn = Nothing
%>

執行后,我們在 Access 中發現已經插入 2 條新記錄了,如下圖:

20150824017


更新記錄

更新記錄僅僅需要將記錄集的指針移動到相應的位置,而后是更新記錄,最后調用 Update 方法進行更新即可。

還是來看代碼和注釋吧(UpdateRecord.asp),如下:

<!--#include file="../include/conn.asp"-->
<%
Dim oRs, sql
sql = "SELECT * FROM [產品]"
Set oRs = Server.CreateObject("ADODB.Recordset")
oRs.Open sql, oConn, 1, 3  '這個3表示可修改
oRs.MoveLast '移動到最后一條記錄
oRs("產品名稱") = "我被修改了"
oRs.Update
oRs.Close
Set oRs = Nothing
'/////////////////////////////////////////////////
'SQL 版本的更新記錄
Dim RA
sql = "UPDATE 產品 SET [產品名稱]='我被修改了' WHERE [產品ID]=(SELECT MIN([產品ID]) FROM 產品)"
oConn.Execute sql, RA
If RA <> 0 Then
  Response.Write("更新記錄成功")
End If
oConn.Close
Set oConn = Nothing
%>

執行后,我們通過 Access 發現第一條和最后一條記錄已經被修改了,查詢結果如下:

20150824018


刪除記錄

刪除語句則是將記錄集指針要移動到相應位置后,直接調用 Delete 方法,即可。

具體實現的代碼(DeleteRecord.asp)如下:

<!--#include file="../include/conn.asp"-->
<%
Dim oRs, sql
sql = "SELECT * FROM [產品]"
Set oRs = Server.CreateObject("ADODB.Recordset")
oRs.Open sql, oConn, 1, 3  '這個3表示可修改
oRs.MoveFirst '定位到第一條記錄
oRs.Delete()
oRs.Update
oRs.Close
Set oRs = Nothing
'/////////////////////////////////////////////////
'SQL 版本的更新記錄
Dim RA
sql = "DELETE FROM 產品 WHERE [產品ID]=(SELECT MIN([產品ID]) FROM 產品)"
oConn.Execute sql, RA
If RA <> 0 Then
  Response.Write("刪除記錄成功")
End If
oConn.Close
Set oConn = Nothing
%>

執行后,我們通過 Access 查看執行的效果,結果什么也沒有刪除,原因是其他表“訂單明細”中包含了相關記錄,不能刪除或改變記錄。如果要刪除需要先刪除關系的表中的記錄。我們在“關系”視圖中將產品表和訂單明細表的“編輯關系”對話框中勾選上“級聯刪除相關記錄”選項,這樣就能刪除了。

再次執行 ASP 頁面代碼,Access 中產品表刪除前后的對比結果如下:

20150825001

20150825002


Open 方法的常用參數

在上面的代碼中,我們已經看到 Recordset 對象在使用 Open 方法時傳了幾個參數,如下代碼:

oRs.Open sql, oConn, 1, 3

其中 sqloConn 兩個含義我們已經知道了,分別是打開記錄集所使用的 SQL 語句和數據庫連接對象。后面的 13 是什么意思呢?

我們先看看 Recordset 對象的 Open 方法定義:

Recordset.Open Source, ActiveConnection, CursorType, LockType, Options

游標類型(CursorType)指定了記錄集中游標指針的移動方法,它的可選值在 adovbs.inc 文件中有記錄,該文件你可以在你的 C:\Program Files\Common Files\System\ado 這個位置找到該文件。如下:

<%
'---- CursorTypeEnum Values ----
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3
%>
  • adOpenForwardOnly 使用僅向前的游標。扯了在記錄中只能向前滾動外,與靜態游標相同。當只需要在 Recordset 中進行一個傳遞時,用它提高性能。
  • adOpenKeyset 使用鍵集游標。盡管從您的 Recordset 不能訪問其他用戶刪除的記錄,但除無法查看其他用戶添加的記錄外,它和動態游標相似。其他用戶所做的數據更改依然能見。
  • adOpenDynamic 使用動態游標,其他用戶所做的添加、更改和刪除均可見,而且允許 Recordset 中所有移動類型。
  • adOpenStatic 使用靜態游標。一組記錄的靜態副本,可用於查找數據或生成報告。其他用戶所做的添加、更改和刪除不可見。
  • adOpenUnspecified 不指定游標類型 (-1)。

鎖定類型(LockType)可選參數如下:

<%
'---- LockTypeEnum Values ----
Const adLockReadOnly = 1   
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4
%>
  • adLockReadOnly Recordset對象以只讀方式啟動,無法運行增、刪、改等操作
  • adLockPessimistic 當數據源正在更新時,系統會鎖定其他用戶的動作,以保證數據的一致性
  • adLockOptimistic 當數據源正在更新時,系統不會鎖定其他用戶的動作,其他用戶可以對數據進行操作。只有在調用 Update 方法時才鎖定記錄。
  • adLockBatchOptimistic 當數據源正在更新時,其他用戶必須將 CursorLocation 改為 adUdeClientBatch 才能對數據進行增、刪、改等操作。

當您首次打開一個 Recordset 時,當前記錄指針指向第一個記錄,同時 BOFEOF 屬性都是 False。如果沒有記錄則 BOFEOF 屬性都是 True


示例代碼下載

ADOConn.RAR


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM