LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
版主

rs.open sql,conn 與conn.execute(sql)的區(qū)別

tercel
2011年4月19日 14:11 本文熱度 3001
 rs.open sql,conn 與conn.execute(sql)的區(qū)別 收藏
引用“srnld(天涯)”的話: 

什么時(shí)候用什么?  
  那就憑個(gè)人經(jīng)驗(yàn)積累的感覺了:  
    如果只需要一筆帶過的碰碰數(shù)據(jù)庫(kù),用execute  
  如果要對(duì)數(shù)據(jù)庫(kù)作比較龐雜的操作!則最好用   rs.open 


------------------------------------------------------------------------

rs.open sql,conn:如果sql是delete,update,insert則會(huì)返回一個(gè)關(guān)閉的記錄集,在使用過程中不要來個(gè)rs.close在文件最后再寫rs.close中間可以來多個(gè)記錄集rs1.open sql1,conn,最后一塊關(guān)閉記錄集:rs.close rs1.close


conn.execute(sql):如果sql是update,insert,delete則應(yīng)該使用conn.execute(sql)也可以不要括號(hào)conn.execute sql 

如果sql是select語句則應(yīng)該使用set rs=conn.execute(sql)括號(hào)一定要,不能省略:這是因?yàn)関b的特性,帶返回值的調(diào)用必須加括號(hào),不帶返回值的調(diào)用可以不要括號(hào)。

1.conn.execute


sql="select * from admin where username='xiaozhu'"
set rs=conn.execute(sql)
'執(zhí)行完以后自動(dòng)關(guān)閉記錄集
'最后只需要關(guān)閉連接就可以了
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
'可以自己設(shè)定一些參數(shù),即鎖定和游標(biāo)的移動(dòng)方式
'最后要關(guān)閉記錄集和連接
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為正常的記錄數(shù)


2.
rs.open是打開數(shù)據(jù)庫(kù) conn.execute 是執(zhí)行SQL指令
set rs=conn.execute(insert,update,delete)返回一個(gè)關(guān)閉了的記錄集
set rs=conn.execute(select)返回一個(gè)沒有關(guān)閉的記錄集

 3.
CONN.EXECUTE(SQL,RowsAffected,C)

    參數(shù)含義:

    SQL的值可以是SQL語句、表名、存儲(chǔ)過程名,也可以是數(shù)據(jù)提供者所能接受的任意字符串。為了提高性能,最好為C參數(shù)指定合適的值

    可選參數(shù)RowsAffected將返回INSERT、UPDATE或DELETE查詢執(zhí)行以后所影響的數(shù)目。這些查詢會(huì)返回一個(gè)關(guān)閉的Recordset對(duì)象。

    一個(gè)SELECT查詢將返回RowsAffected值為-1并且返回帶有一行或多行內(nèi)容的打開的Recordset。

 4.
conn.execute sql適合于不需返回recordset對(duì)象時(shí)使用,比如下面的代碼:
sql="delete from enews where id="&cstr(id)
conn.execute sql

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

如果去掉execute(sql)這兒的括號(hào)(即為set rs = conn.execute sql),就會(huì)提示“語句未結(jié)束”這樣的錯(cuò)誤提示,我翻看了一下語法格式,發(fā)現(xiàn)有二種格式,詳解如下:

格式一:Connection對(duì)象名.Execute(SQL指令). 
格式二:Connection對(duì)象名.Execute(數(shù)據(jù)表名)。 
附:

set   rs   =   conn.execute(sql)  
   
  是帶有返回值的,一般sql為查詢的時(shí)候使用。如  
  set   rs   =   conn.execute("select   *   from   ...")  
  當(dāng)然執(zhí)行insert   into   和delete也是可以的  
  set   rs   =   conn.execute("insert   into   table   (f1,f2..")  
  但是要?jiǎng)?chuàng)建Recordset對(duì)象,占用服務(wù)器資源。在insert   into,   delete的時(shí)候我們一般不需要返回記錄集。所以我是這樣認(rèn)為的:  
   
  在使用查詢的時(shí)候,用   set   rs   =   conn.execute("select   *   from   table")  
  在插入和刪除時(shí)候,用   conn.execute("delete   from   table   where   ...")  
   
  第二種方式代碼簡(jiǎn)潔,不需要顯式地創(chuàng)建Recordset對(duì)象(但實(shí)際上好象是隱式創(chuàng)建的)  
   
  第二種方法還有一些簡(jiǎn)潔的寫法:如,最某表的記錄數(shù)  
   
  dim   count  
  count   =   conn.execute(select   count(*)   from   table)(0)  
  上面的語句等于  
  count   =   conn.execute(select   count(*)   from   table).fields(0).value  
   
  綜上:區(qū)別在于set   rs   =   conn.execute是顯示創(chuàng)建recordset對(duì)象,而conn.execute是隱式的。  
  能用conn.execute的時(shí)候就用conn.execute,好處有  
  一、代碼簡(jiǎn)潔  
  二、效率應(yīng)該有所提高

-------------------------------------------------------------------------------------

再摘引一下:(srnld(天涯))


形成記錄集的方法有三種   CONN.execute     rs.open     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比上一個(gè)性能要好那么一丁點(diǎn)  
      (     command對(duì)象更靈活,執(zhí)行范圍更廣)  
   
    使用   CONN.execute   可以不用關(guān)閉直接執(zhí)行下一個(gè)   set   rs=conn.execute(SQL)  
  但性能速度會(huì)大打折扣!!  
  大約要慢   2~5倍!!(這是我在msSQL循環(huán)1000次親自測(cè)試過的,不信你馬上自己測(cè)試),所以執(zhí)行下一個(gè)   rs=conn.execute之前!!一定要關(guān)閉掉!是個(gè)好習(xí)慣!  
  使用單一對(duì)象的rs     rs.open在open下一個(gè)記錄集之前,必需要求顯示關(guān)閉,否則出錯(cuò),速度在SQL,CONN,0,1的情況下可前者基本一樣  
   
  所以我喜歡使用直設(shè)置一個(gè)   CreateObject("adodb.recordser")(在不需要多個(gè)記錄集交錯(cuò)操作的情況下,多個(gè)也不礙是!)  
  然后從頭用到尾!!!  
  開門關(guān)門開門關(guān)門~~~~~咵踏咵踏~~~~  
  最后一個(gè)   set   rs=nothing   化上句號(hào),爽!  
   
  更主要是   open提供非常靈活的操作數(shù)據(jù)庫(kù)元數(shù)據(jù)的非常多的屬性!!  
  打開百寶箱,金光燦燦什么都看見!  
  有很多情況下是非得用open來做的!  
  而conn.execute   想黑布下?lián)Q膠卷~~~偷偷摸摸~~非常單一!!!  
   
  比如:  
   
  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   '   更新記錄集寫到數(shù)據(jù)庫(kù)  
   
  rs.addnew   '加一條新記錄  
  rs(0)=1  
  rs(1)=ddd  
  rs(2)=kkk  
  rs.update  
  id=rs(3)     rs(s)   '取的字段是自動(dòng)編號(hào)   立即獲得新記錄的自動(dòng)編號(hào)id   //這是非常常用的  
   
  rs1.addnew   對(duì)rs1添加關(guān)連使用id   rs的新記錄  
  rs1("id")=id    
  rs1(1)=...  
  ..  
  rs1.update  
   
  rs1.close:set   rs1=nothing  
  rs.close:set   rs=nothing  
   
   
  上面的操作如果采用CONN.execute   則要用到四個(gè)   CONN.execute  
   
  CONN.execute("update   ..")  
  CONN.execute("insert   into   表1:")  
  rs=CONN.execute("select   新的自動(dòng)   id")      
  CONN.execute("insert   into   表二")  
  那一種方法邏輯條理更好~~一目了然  
   
  ======================  
   
  還有一個(gè)有趣的使用Recordset   open記錄的方法!!  
  我想起來是有點(diǎn)費(fèi)解  
   
  Set   rs=server.CreateObject("Adodb.recordset")  
  Set   rs=server.CreateObject("Adodb.recordset")  
   
  rs.open   SQL1,CONN  
  rs.open   SQL2,CONN  
   
  '嘿嘿~~~這是同時(shí)設(shè)置同名的兩個(gè)對(duì)象來打開兩個(gè)記錄集,而且是可用的!  
  '只要取的列名合乎這兩個(gè)記錄集中元數(shù)據(jù)  
  '則正常操作!!  
  擴(kuò)展開來  
   
  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  
   
  這樣大于二個(gè)同名的   rs我還沒試過!!  
   
  感覺有點(diǎn)相當(dāng)與   SQL聯(lián)合查詢?cè)俅蜷_記錄集~~~  
  以前我這樣用過!!應(yīng)該不是眼花!!  
  ===============  
   
  什么時(shí)候用什么?  
  那就憑個(gè)人經(jīng)驗(yàn)積累的感覺了:  
    如果只需要一筆帶過的碰碰數(shù)據(jù)庫(kù),用execute  
  如果要對(duì)數(shù)據(jù)庫(kù)作比較龐雜的操作!則最好用   rs.open  

 

本文來自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/wgf72/archive/2009/02/22/3920524.aspx

該文章在 2011/4/19 14:11:08 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
婷婷人人爽人人爽人人片 | 亚洲区一区二区三区 | 在线高清理伦片a | 亚洲国产初高中生女AV | 亚洲中文字幕在线区二 | 在线观看网站深夜免费A√ 亚洲中文精品久久久久久直播 |