- ADO:ActiveX Data Objects,是一個用於存取資料來源的COM元件(是一個用於存取資料來源的COM(Component Object Model)元件),是程式語言和OLEDB間的一個中間層。使用ADO存取資料庫SQL的知識不是必要的,但仍可透過ADO的命令物件來執行SQL命令。
參考:http://zh.wikipedia.org/wiki/ADO
- OLEDB(Object Linking and Embedding, DataBase,物件連結嵌入資料庫):以統一方式存取不同類型的資料而設計的一種應用程式介面,是一組用元件物件模型(COM)實作的介面。除了支援SQL的資料庫,也能用在不支援SQL的物件資料庫,或試算表檔案(如Excel)。
參考:http://zh.wikipedia.org/wiki/OLE_DB
- ADO物件階層圖
- ADO的Connection及RecordSet物件:建立資料庫連線→取得資料→操作資料
- Connection物件:建立連接資料庫的物件。
- 參考:http://www.w3school.com.cn/ado/ado_ref_connection.asp
- 如何建立Connection?
dim oConn As ADODB.Connection
set oConn = Server.CreateObject("ADODB.connection") - 設定連線字串
- zConn = "Driver={SQL Server};server=192.168.xx.xx;uid=UserID;pwd=xxx;database=DBname" ← MS-SQL
- zConn = "Provider=IBMDA400;data source=192.168.xx.xx;User Id=UserID;password=xxx;DEFAULT COLLECTION=SLLIB;" ← AS/400
- zConn = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=c:\DB\xxx.mdb" ← Access
- 開啟資料連結:
oConn.open zConn
- RecordSet物件:存放所取得資料的物件。
- 參考:http://www.w3school.com.cn/ado/ado_ref_recordset.asp
- 如何產生RecordSet?
dim oRs As ADODB.RecordSet
set oRs = Server.CreateObject("ADODB.recordset") - 用Open方法取得RecordSet的語法:
RecordSet.Open source, ActiveConnection, CursorType, LockType, Options - source:可以是一串SQL命令。
- CursorType:
adOpenForwardOnly(0):只可向前移動的RecordSet(往末筆方向)(預設)
adOpenKeyset(1):可以自由移動的RecordSet
adOpenDynamic(2):可動態更新編輯的RecordSet
adOpenStatic(3):可靜態更新編輯的RecordSet - LockType:
adLockReadOnly(1):唯讀(預設)
adLockPessimistic(2):悲觀鎖定,取得RecordSet後立即鎖定。
adLockOptimistic(3):樂觀鎖定,只在進行更新時鎖定。
adLockBatchOptimistic(4):批次樂觀鎖定,同時更新多筆資料時,暫不將資料更新到資料庫,先放在暫存區,執行UpdateBatch時,才將資料整批寫回資料庫。 - 用Open取得RecordSet的範例:
oRS.open zSQL, oConn, adOpenKeySet, adLockReadOnly - 用Execute方法取得RecordSet的語法:
Set RecordSet = Connection.Execute[(CommandText,RecordAffected,Options)]
CommandText:SQL命令
RecordAffected: 為Long形態的變數,表示被此命令所影響的資料筆數
Options:
1-adCmdText SQL查詢文字
2-adCmdTable 資料表
4-adCmdStoredProc 預存函式
8-adCmdUnknown 未定義;由Provider決定
512-adCmdTableDirect 直接開啟的資料表(應避免使用在SQL Server資料庫上)
- 操作所取得的資料(RecordSet)
- 如果沒有取得任何資料,EOF及BOF的屬性值,都會是True。所以如果要確認已取得資料的情況下,才進行資料操作,可以這樣做:
if not oRs.eof then
'操作資料
'資料操作後,如確定不再使用,可以將RecordSet清空
oRs.close
set oRs = nothing
else
'Recordset未取得任何資料
end if
'程式最後記得清空連線
oConn.close
set oConn = nothing - 如何移動資料指標所在位置?
- oRs.MoveFirst
- oRs.MovePrevious
- oRs.MoveNext
- oRs.MoveLast
- 逐筆顯示資料一:
While not oRS.eof
response.write oRs("欄位名稱").value & ","
response.write oRs(欄位順序).value & "<br />"
oRs.MoveNext
wend - 逐筆顯示資料二:
do until oRs.EOF
for each x in oRs.Fields
Response.Write x.name & "="
Response.Write x.value & "<br />"
next
Response.Write "<br />"
oRs.MoveNext
loop - 使用GetRows取得RecordSet的資料:
- GetRows的方法會將Recordset的資料放到指定的二維陣列中,第0維的個數是資料欄位數,第1維是資料筆數。
- 語法:varArray = rs.GetRows([Rows], [Start], [Fields])
Rows :表示要擷取的資料筆數。預設值為 adGetRowsRest (-1)。
Start:讀取起點的BookMark;adBookmarkCurrent(0)(目前資料),adBookmarkFirst(1)(第1筆資料),adBookmarkLast(2)(最後資料)。
Fields:可以用欄位名稱、索引等來指定要讀取的資料範圍。當欄位數大於1個時,可以用陣列表示。省略 Rows 參數或設定爲 adGetRowsRest(-1)時,GetRows 方法會讀取所有資料並讓Recordset的變成EOF狀態,而不會産生任何錯誤。 - 範例:aDS = oRs.GetRows(, , Array("EmpCde", "EmpNam", "EmpTel"))
資料的筆數是UBound(aDS,2)+1
欄位數是UBound(aDS,1)+1 - 使用GetString取得RecordSet的資料:
- 語法:GetString([Format], [NumRows], [ColDelimiter], [RowDelimiter], [NullExpr])
Format:預設adClipString(2)
NumRows:要取得的列數,使用-1或省略,代表讀取所有剩下的記錄
ColDelimiter:行的分隔字元,預設為Tab
RowDelimiter:每筆資料間的分隔字元,預設為換行字元
NullExpr:用來表示Null欄位的字串,預設為空字串 - 範例:
zString=oRs.GetString( , ,"</td><td>","</td></tr><tr><td>"," ") - 使用Find方法取得符合條件的RecordSet中的資料
- 語法:RecordSet.Find criteria, SkipRows, SearchDirection, start
criteria:搜尋條件的字串
SkipRows:從開始位置起,要跳過的資料筆數,可省略
SearchDirection:搜尋方向,可省略。adSearchForward往最後一筆方向,adSearchBackward往第一筆方向
start:開始位置 - 範例:
oRs.Find = "欄位名稱='條件值'" - 新增、刪除、更新
RecordSet.AddNew [Field],[value]
RecordSet.Delete [Field],[value]
RecordSet.Update [Field],[value] - 當LockType為adLockPressimistic或adLockOpimistic時,不允許兩個異動同時進行,可以用Supports方法預先檢查
- 語法:boolean=RecordSet.Supports(CursorOptions)
CursorOptions: adUpdate, adAddNew, adDelete, adMovePrevious, adBookMark - Field物件
Recordset物件下有Fields物件集合,Fields由一或多個Field物件所組成。每個Field物件代表資料來源的一資料行。 - 在RecordSet中取得或指定資料指標所在位置的某欄位資料,完整的語法是:
RecordSet.Fields("欄位名稱").value = "欄位值" - 因為Fields是RecordSet的預設屬性,所以表達的語法可以是:
RecordSet("欄位名稱").value = "欄位值" - 又因為value是Fields的預設屬性,所以表達的語法也可以是:
RecordSet("欄位名稱") = "欄位值" - Fields集合物件
如何計算Field的個數?RecordSet.Fields.Count - ADO元件,所提供的另一個存取資料作法
- Command物件
Command是使用上較靈活的物件,可以帶入參數,相當於資料庫的預存程序。但是用這種方法取得的RecordSet物件的LockType是adLockReadOnly... - 以下使用Command物件的範例:
set oConn = Server.CreateObject("ADODB.connection")
oConn.Provider = "Microsoft.Jet.OLEDB.4.0"
oConn.open "c:/DBFiles/DBname.mdb"
set oComm=Server.CreateObject("ADODB.command")
oComm.ActiveConnection=oConn
zSQL="Select * from PSEMPP "
oComm.CommandText=zSQL
set oRs=ServerCreateObject("ADODB.RecordSet")
set oRS = oComm.Execute
... - Execute是Command物件的重要方法,語法:
Execute([RecordsAffected], [Parameters], [Options]) As Recordset
RecordsAffected:Long型態的資料筆數
Parameters:參數陣列
Options:
可以指定Command 物件的 CommandText 屬性。可以是一或多個 CommandTypeEnum 或 ExecuteOptionEnum 值。預設值是 adCmdUnspecified。 - 參考:http://www.w3school.com.cn/ado/ado_ref_command.asp
- Parameter物件
雖然Command物件的Execute方法可以傳遞任意數量的參數,但Execute方法無法接收輸出的參數。如果要接收輸出的參數,可用CreateParameter方法來建立Parameter物件 - 語法:CreateParameter([Name], [Type], [Direction], [Size], [Value]) As Parameter
name:Parameter物件的名稱
type:adEmpty, adSmallInt, adInteger, adDate, adChar, adVarChar ...
Direction:代表輸入參數,輸出參數,或預存函數的回傳值
0-adParamUnknown 不知名的方向
1-adParamInput 輸入參數(預設值)
2-adParamOutput 輸出參數
3-adParamInputOutput 輸出入參數
4-adParamReturnValue 預存函數的傳回值 - Parameters物件集合
範例:
set oConn = Server.CreateObject("ADODB.connection")
oConn.Provider = "Microsoft.Jet.OLEDB.4.0"
oConn.open "c:/DBFiles/DBname.mdb"
zSQL="Select * from PSEMPP where EMPCDE>? and EMPCDE<? "
set oComm=Server.CreateObject("ADODB.command")
oComm.ActiveConnection=oConn
oComm.CommandText=zSQL
set param1=Server.Create("ADODB.Parameter")
set param1=CreateParameter("pCDE1", adVarChar, adParamInput, 10)
oComm.Parameters.Append param1
set param2=Server.Create("ADODB.Parameter")
set param2=CreateParameter("pCDE2", adVarChar, adParamInput, 10)
oComm.Parameters.Append param2
'取得參數值,並將指定到Parameter物件
oComm.Parameters("pCDE1").value= "1000"
oComm.Parameters("pCDE2").value= "2000"
'取得查詢結果
set oRs = Server.Create("ADODB.RecordSet")
set oRS = oComm.Execute
- 參考資料
站內搜尋:Yahoo搜尋的結果,如果沒有給完整的網址,請在站內再搜尋一次!
2014-06-22
使用ADO物件連接資料庫,存取操作資料
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言