rs.open sql,conn 與conn.execute(sql)

來源:互聯網
上載者:User
rs.open
sql,conn 與conn.execute(sql)

如果只需要一筆帶過的碰碰資料庫,用conn.execute(sql)  
如果要對資料庫作比較龐雜的操作!則最好用rs.open sql,conn  

rs.open sql,conn:有記錄集返回,此記錄集可以前後移動,可用於執行SELECT語句。開啟的記錄可以進行分頁顯示,但這種方式開啟的記錄集不能排序
conn.execute(sql):也可以返回記錄集的,只不過只能是唯讀、只向前記錄集,一般用於執行update、insert或者delete語句。
通過執行sql,返回後得到記錄集,比較簡單地得到經過篩選過的記錄集,但是通過這種方式得到的記錄集,不能進行分頁顯示。
rs.open sql,conn:如果sql是 delete,update,insert則會返回一個關閉的記錄集,在使用過程中不要來個rs.close在檔案最後再寫rs.close中間可以來多 個記錄集rs1.open sql1,conn,
最後一塊關閉記錄集:rs.close rs1.close
conn.execute(sql):如果sql是update,insert,delete則應該使用conn.execute(sql)也可以不要括弧conn.execute sql 
如果sql是select語句則應該使用set rs=conn.execute(sql)括弧一定要,不能省略:這是因為vb的特性,帶傳回值的調用必須加括弧,不帶傳回值的調用可以不要括弧。

   rs.open sql,conn: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

   conn.execute(sql):sql="select * from admin where
username='xiaozhu'"
           set rs=conn.execute(sql)
           '執行完以後自動關閉記錄集
           '最後只需要關閉串連就可以了
           conn.close
           set conn=nothing

   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適合於不需返回recordset對象時使用,比如下面的代碼:
  sql="delete from enews where
id="&cstr(id)
  conn.execute sql

  如果需要返回recordset對象,則使用如下代碼:
  sql="select from enews where
id="&cstr(id)
  set rs = conn.execute(sql)

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

  格式一:Connection對象名.Execute(SQL指令). 
  格式二:Connection對象名.Execute(資料表名)。 

附一:

 set   rs  
=   conn.execute(sql)  

  是帶有傳回值的,一般sql為查詢的時候使用。如  
  set   rs   =  
conn.execute("select   *   from  
...")  
  當然執行insert   into   和delete也是可以的  
  set   rs   =  
conn.execute("insert   into   table  
(f1,f2..")  
  但是要建立Recordset對象,佔用伺服器資源。在insert  
into,   delete的時候我     們一般不需要返回記錄集。所以我是這樣認為的:  

  在使用查詢的時候,用   set   rs  
=   conn.execute("select   *  
from   table")  
  在插入和刪除時候,用  
conn.execute("delete   from   table  
where   ...")  
    
  第二種方式代碼簡潔,不需要顯式地建立Recordset對象(但實際上好象是隱式建立的)  
  第二種方法還有一些簡潔的寫法:如,最某表的記錄數  

  dim  
count  
  count   =   conn.execute(select  
count(*)   from   table)(0)  
  上面的語句等於  
  count   =   conn.execute(select  
count(*)   from   table).fields(0).value  

  綜上:區別在於set   rs   =  
conn.execute是顯示建立recordset對象,而conn.execute是隱式的。  
  能用conn.execute的時候就用conn.execute,好處有  
  一、代碼簡潔  
  二、效率應該有所提高

附二:

形成記錄集的方法有三種 1.Conn.execute 2.rs.open sql,conn  3.Command.execute  方法用法大大不通     
    通常  Set
  rs=CONN.execute(SQL)    或直接  
rs=CONN.execute(SQL)和

    Set   rs=Server.CreateObject("ADODB.Recordset")
 

    rs.open   SQL,CONN,0,1  或rs.open   SQL,CONN  
    這種情況通常open比上一個效能要好那麼一丁點
 
    使用CONN.execute 可以不用關閉直接執行下一個set
  rs=conn.execute(SQL)  但效能速度會大打折扣!! 大約要慢   2~5倍!!

    (這是我在msSQL迴圈1000次親自測試過的,不信你馬上自己測試),所以執行下一個   rs=conn.execute之前!!一定要關閉掉!是個好習慣!
 
    使用單一對象的rs
   rs.open在open下一個記錄集之前,必需要求顯示關閉,否則出錯,速度在SQL,CONN,0,1的情況下可前者基本一樣  

    所以我喜歡使用直設定一個   CreateObject("adodb.recordser")(在不需要多個記錄集交錯操作的情況下,多個也不礙是!)
 
    然後從頭用到尾!!!
 
    開門關門開門關門~~~~~咵踏咵踏~~~~  
    最後一個  
set   rs=nothing   化上句號,爽!  
   
  更主要是   open提供非常靈活的操作資料庫中繼資料的非常多的屬性!!  
  開啟百寶箱,金光燦燦什麼都看見!
 
  有很多情況下是非得用open來做的!  

  而conn.execute   想黑布下換菲林~~~偷偷摸摸~~非常單一!!!
 
   
  比如:  
   
  rs1.open   SQL1,conn,0,1  
  rs.open   SQL,conn,1,3  
  if   rs(0)<0   then   rs(0)=0  
  rs(1)=aaa  
  rs(2)=bbb  
  rs.update   '   更新記錄集寫到資料庫
 
   
  rs.addnew   '加一條新記錄  
  rs(0)=1  
  rs(1)=ddd  
  rs(2)=kkk  
  rs.update  
  id=rs(3)     rs(s)   '取的欄位是自動編號
  立即獲得新記錄的自動編號id   //這是非常常用的
 
   
  rs1.addnew   對rs1添加關連使用id
  rs的新記錄  
  rs1("id")=id    
  rs1(1)=...  
  ..  
  rs1.update  
   
  rs1.close:set   rs1=nothing  
  rs.close:set   rs=nothing  
   
   
  上面的操作如果採用CONN.execute   則要用到四個   CONN.execute  
   
  CONN.execute("update   ..")  
  CONN.execute("insert   into   表1:")  
  rs=CONN.execute("select   新的自動  
id")      
  CONN.execute("insert   into   表二")  
  那一種方法邏輯條理更好~~一目瞭然  

   
  ======================  
   
  還有一個有趣的使用Recordset   open記錄的方法!!  
  我想起來是有點費解  
   
  Set   rs=server.CreateObject("Adodb.recordset")  
  Set   rs=server.CreateObject("Adodb.recordset")  
   
  rs.open   SQL1,CONN  
  rs.open   SQL2,CONN  
   
  '嘿嘿~~~這是同時設定同名的兩個對象來開啟兩個記錄集,而且是可用的!  
  '只要取的列名合乎這兩個記錄集中中繼資料  
  '則正常操作!!  
  擴充開來  
   
  Set   rs=server.CreateObject("Adodb.recordset")  
  Set   rs=server.CreateObject("Adodb.recordset")  
  Set   rs=server.CreateObject("Adodb.recordset")  
  Set   rs=server.CreateObject("Adodb.recordset")  
   
  rs.open   SQL1,CONN  
  rs.open   SQL2,CONN  
  rs.open   SQL3,CONN  
  rs.open   SQL4,CONN  
   
  這樣大於二個同名的   rs我還沒試過!!
 
   
  感覺有點相當與   SQL聯集查詢再開啟記錄集~~~
 
  以前我這樣用過!!應該不是眼花!!
 
  ===============  
   
  什麼時候用什麼?  
  那就憑個人經驗積累的感覺了:  
    如果只需要一筆帶過的碰碰資料庫,用execute
 
  如果要對資料庫作比較龐雜的操作!則最好用  
rs.open  

附三:rs.close()與conn.close(),set rs=nothing與set
conn=nothing

conn 資料庫物件 可以簡單的把它理解為一個mdb檔案或者一個SQL資料庫(注意這種理解方法是錯誤的,嚴格的說它應該是一個與那個資料庫建立了串連的“對象”而已。)

rs RecordSet對象(記錄集) 當只是讀取資料時,可以把它理解為從一個資料庫中檢索出來的一系列行 當用來更新資料時,

可以把它理解為串連著資料庫中指定的行的遙控器 現在應該明白什麼時候要關閉conn了吧?

開啟了資料庫,如果下面不用再進行資料庫操作,就應該立刻關閉。

不同的頁面,本來就要重新串連,與前一個頁面的操作是沒有關係的,你其他頁面有沒有關閉都要先開啟資料庫。

對於節約資源,減輕伺服器負擔方面,資料庫開啟的越遲越好,關閉的越早越好。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.