rs.open sql,conn 與conn.execute(sql)的區(qū)別
當(dāng)前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
rs.open sql,conn 與conn.execute(sql)的區(qū)別 收藏 引用“srnld(天涯)”的話: 什么時候用什么? 那就憑個人經(jīng)驗積累的感覺了: 如果只需要一筆帶過的碰碰數(shù)據(jù)庫,用execute 如果要對數(shù)據(jù)庫作比較龐雜的操作!則最好用 rs.open ------------------------------------------------------------------------ rs.open sql,conn:如果sql是delete,update,insert則會返回一個關(guān)閉的記錄集,在使用過程中不要來個rs.close在文件最后再寫rs.close中間可以來多個記錄集rs1.open sql1,conn,最后一塊關(guān)閉記錄集:rs.close rs1.close conn.execute(sql):如果sql是update,insert,delete則應(yīng)該使用conn.execute(sql)也可以不要括號conn.execute sql 如果sql是select語句則應(yīng)該使用set rs=conn.execute(sql)括號一定要,不能省略:這是因為vb的特性,帶返回值的調(diào)用必須加括號,不帶返回值的調(diào)用可以不要括號。 1.conn.execute sql="select * from admin where username='xiaozhu'" set rs=conn.execute(sql) '執(zhí)行完以后自動關(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)的移動方式 '最后要關(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ù)庫 conn.execute 是執(zhí)行SQL指令 set rs=conn.execute(insert,update,delete)返回一個關(guān)閉了的記錄集 set rs=conn.execute(select)返回一個沒有關(guān)閉的記錄集 3. CONN.EXECUTE(SQL,RowsAffected,C) 參數(shù)含義: SQL的值可以是SQL語句、表名、存儲過程名,也可以是數(shù)據(jù)提供者所能接受的任意字符串。為了提高性能,最好為C參數(shù)指定合適的值 可選參數(shù)RowsAffected將返回INSERT、UPDATE或DELETE查詢執(zhí)行以后所影響的數(shù)目。這些查詢會返回一個關(guān)閉的Recordset對象。 一個SELECT查詢將返回RowsAffected值為-1并且返回帶有一行或多行內(nèi)容的打開的Recordset。 4. 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),就會提示“語句未結(jié)束”這樣的錯誤提示,我翻看了一下語法格式,發(fā)現(xiàn)有二種格式,詳解如下: 格式一:Connection對象名.Execute(SQL指令). 格式二:Connection對象名.Execute(數(shù)據(jù)表名)。 附: set rs = conn.execute(sql) 是帶有返回值的,一般sql為查詢的時候使用。如 set rs = conn.execute("select * from ...") 當(dāng)然執(zhí)行insert into 和delete也是可以的 set rs = conn.execute("insert into table (f1,f2..") 但是要創(chuàng)建Recordset對象,占用服務(wù)器資源。在insert into, delete的時候我們一般不需要返回記錄集。所以我是這樣認(rèn)為的: 在使用查詢的時候,用 set rs = conn.execute("select * from table") 在插入和刪除時候,用 conn.execute("delete from table where ...") 第二種方式代碼簡潔,不需要顯式地創(chuàng)建Recordset對象(但實際上好象是隱式創(chuàng)建的) 第二種方法還有一些簡潔的寫法:如,最某表的記錄數(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對象,而conn.execute是隱式的。 能用conn.execute的時候就用conn.execute,好處有 一、代碼簡潔 二、效率應(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比上一個性能要好那么一丁點 ( command對象更靈活,執(zhí)行范圍更廣) 使用 CONN.execute 可以不用關(guān)閉直接執(zhí)行下一個 set rs=conn.execute(SQL) 但性能速度會大打折扣!! 大約要慢 2~5倍!!(這是我在msSQL循環(huán)1000次親自測試過的,不信你馬上自己測試),所以執(zhí)行下一個 rs=conn.execute之前!!一定要關(guān)閉掉!是個好習(xí)慣! 使用單一對象的rs rs.open在open下一個記錄集之前,必需要求顯示關(guān)閉,否則出錯,速度在SQL,CONN,0,1的情況下可前者基本一樣 所以我喜歡使用直設(shè)置一個 CreateObject("adodb.recordser")(在不需要多個記錄集交錯操作的情況下,多個也不礙是!) 然后從頭用到尾!!! 開門關(guān)門開門關(guān)門~~~~~咵踏咵踏~~~~ 最后一個 set rs=nothing 化上句號,爽! 更主要是 open提供非常靈活的操作數(shù)據(jù)庫元數(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ù)庫 rs.addnew '加一條新記錄 rs(0)=1 rs(1)=ddd rs(2)=kkk rs.update id=rs(3) rs(s) '取的字段是自動編號 立即獲得新記錄的自動編號id //這是非常常用的 rs1.addnew 對rs1添加關(guān)連使用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 '嘿嘿~~~這是同時設(shè)置同名的兩個對象來打開兩個記錄集,而且是可用的! '只要取的列名合乎這兩個記錄集中元數(shù)據(jù) '則正常操作!! 擴展開來 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我還沒試過!! 感覺有點相當(dāng)與 SQL聯(lián)合查詢再打開記錄集~~~ 以前我這樣用過!!應(yīng)該不是眼花!! =============== 什么時候用什么? 那就憑個人經(jīng)驗積累的感覺了: 如果只需要一筆帶過的碰碰數(shù)據(jù)庫,用execute 如果要對數(shù)據(jù)庫作比較龐雜的操作!則最好用 rs.open 本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/wgf72/archive/2009/02/22/3920524.aspx
該文章在 2011/4/19 14:11:08 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |