1. 程式人生 > >Rs.Open和Conn.Execute的詳解和區別及&H0001的說明

Rs.Open和Conn.Execute的詳解和區別及&H0001的說明

一、Conn.Execute(SQL,RowsAffected,C)

引數含義:

SQL的值可以是SQL語句、表名、儲存過程名,也可以是資料提供者所能接受的任意字串。為了提高效能,最好為C引數指定合適的值

可選引數RowsAffected

1、一個Insert、Update或Delete查詢執行以後,RowsAffected返回所影響的數目,這些查詢會返回一個關閉的Recordset物件。

2、一個SELECT查詢將返回RowsAffected值為-1並且返回帶有一行或多行內容的開啟的Recordset。

<%
Set Conn=OpenDatabase'(OpenDatabase函式詳見:ASP中與ACCESS和MSSQL資料庫建立連線方法)
Conn.Execute "update Table1 set Col1='123'",RowsAffected,&H0001
Response.Write RowsAffected&" 行受到影響"
Conn.close
Set Conn=Nothing
%>

二、Rs.Open SQL,Conn,A,B,C

Set Rs=Server.CreateObject ("adodb.RecordSet")
sql="xxxx"
Rs.Open Sql,Conn,1,1,&H0001
irs=rs.getrows(10)

&H0001是什麼意思?以前第一次見到這個時,著實迷惑了一陣。現在網站關於這個的資料滿天飛了。在此提一下,下面引數說明中有具體說明。

A引數:遊標型別

Const adOpenForwardOnly=0 只讀,預設。在記錄集內的記錄間遊標只允許往前移動。不支援分頁、Recordset、BookMark
Const adOpenKeyset=1 只讀,鍵集遊標,當前資料記錄可自由移動,其他使用者對記錄說做的修改將反映到記錄集中,但其他使用者增加或刪除記錄不會反映到記錄集中。支援分頁、Recordset、BookMark
Const adOpenDynamic=2 可讀寫,當前資料記錄可自由移動,動態遊標功能最強,但耗資源也最多。使用者對記錄說做的修改,增加或刪除記錄都將反映到記錄集中。支援全功能瀏覽(ACCESS不支援)。
Const adOpenStatic=3 靜態遊標,只是資料的一個快照,使用者對記錄說做的修改,增加或刪除記錄都不會反映到記錄集中。支援向前或向後移動

B引數:鎖定型別

Const adLockReadOnly=1 預設值,記錄集是隻讀的,不能修改記錄
Const adLockPessimistic=2 '悲觀鎖定,當編輯時立即鎖定記錄,以確保成功地編輯記錄。最安全的方式
Const dLockOptimistic=3 '樂觀鎖定,直到用Update方法提交更新記錄時才鎖定記錄,而在此前的其他操作仍可對當前記錄進行更改、插入和刪除等
Const dLockBatchOptimistic=4 '批量樂觀鎖定,允許修改多個記錄,只有呼叫UpdateBatch方法後才鎖定記錄。

當不需要改動任何記錄時,應該使用只讀的記錄集,這樣提供者不用做任何檢測。對於一般的使用,樂觀的鎖定可能是最好的選擇,因為記錄只被鎖定一小段時間,資料在這段時間被更新。這減少了資源的使用。

C引數:(指定SQL語句型別)

Const ADCmdUnknown=&H0008 '未知,需要系統來判斷,速度慢,為預設值
Const ADCmdText=&H0001 '將執行一段sql
Const ADCmdTable=&H0002 '將操作一個表
Const ADCmdStoredProc=&H0004 '將操作儲存過程名稱
Const ADCmdFile= &H0100 '物件型別相應的檔名稱
Const ADCmdTableDirect=&H0200 '是能直接從表中獲取行內容的表名稱

三、Rs.Open和Conn.Execute的區別:

Rs.Open SQL,Conn
如果sql是delete,update,insert則會返回一個關閉的記錄集,在使用過程中不要來個rs.close在檔案最後再寫rs.close中間可以來多個記錄集rs1.open sql1,conn,最後一塊關閉記錄集:rs.close rs1.close

Conn.Execute(SQL)
如果sql是delete,update,insert則會返回一個關閉的記錄集,在使用過程中不要來個rs.close在檔案最後再寫rs.close中間可以來多個記錄集rs1.open sql1,conn,最後一塊關閉記錄集:rs.close rs1.close.
如果sql是update,insert,delete則應該使用Conn.Execute(sql)也可以不要括號Conn.Execute sql
如果sql是select語句則應該使用Set Rs=Conn.Execute(sql)括號一定要,不能省略
這是因為vb的特性,帶返回值的呼叫必須加括號,不帶返回值的呼叫可以不要括號。

1.Conn.Execute

sql="select * from admin where username='xiaozhu'"
Set Rs=Conn.Execute(sql)
'執行完以後自動關閉記錄集
'最後只需要關閉連線就可以了
conn.close
Set conn=nothing

2.Rs.Open

Set Rs=Server.CreateObject("Adodb.Recordset")
sql="select * from admin where username='xiaozhu'"
Rs.Open sql,Conn,1,1
'可以自己設定一些引數,即鎖定和遊標的移動方式
'最後要關閉記錄集和連線
Rs.Close
Set Rs=nothing
Conn.Close
Set Conn=Nothing

3.command.execute

sql="select * from admin where username='xiaozhu'"
Set Rs=Command.Execute(sql)

1.
Set Rs=Conn.Execute("如果是select語句") 得到的rs.recordcount=-1
Rs.Open sql,conn("sql為select語句") 得到的rs.recordcount為正常的記錄數

2.
Rs.Open是開啟資料庫 Conn.Execute 是執行SQL指令
Set Rs=Conn.Execute(insert,update,delete)返回一個關閉了的記錄集
Set Rs=Conn.Execute(select)返回一個沒有關閉的記錄集

3.
Conn.Execute(SQL,RowsAffected,C)

引數含義:

SQL的值可以是SQL語句、表名、儲存過程名,也可以是資料提供者所能接受的任意字串。為了提高效能,最好為C引數指定合適的值。
可選引數RowsAffected將返回INSERT、UPDATE或DELETE查詢執行以後所影響的數目。這些查詢會返回一個關閉的Recordset物件。
一個SELECT查詢將返回RowsAffected值為-1並且返回帶有一行或多行內容的開啟的Recordset。

4.
Conn.Execute sql適合於不需返回recordset物件時使用,比如下面的程式碼:
sql="delete from news where id="&cstr(id)
Conn.Execute sql

如果需要返回recordset物件,則使用如下程式碼:
sql="select from news where id="&cstr(id)
Set Rs=Conn.Execute(sql)

如果去掉execute(sql)這兒的括號(即為set rs = Conn.Execute sql),就會提示“語句未結束”這樣的錯誤提示,我翻看了一下語法格式,發現有二種格式,詳解如下:

格式一:Connection物件名.Execute(SQL指令)
格式二:Connection物件名.Execute(資料表名)


Conn.Execute(sql)(0)為資料集的第一個欄位的值
Conn.Execute(sql) 返回記錄集。
Conn.Execute sql 不返回記錄集。一般用於插入、更新,刪除等不帶返回值的操作