iT邦幫忙

0

資料庫連結 Connection的寫法

想知道Connection的寫法
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open Application("conn")
sql ="select A from B"
Set rs1 = Server.CreateObject("ADODB.Recordset")
rs1.Open sql, conn , 1,1,1
do while not rs1.EOF

***問題 : 迴圈裡面 要再SELECT , 我這conn2放這對嗎?
Set conn2 = Server.CreateObject("ADODB.Connection")
conn2.Open Application("conn")

sql ="select C from D"
Set rs2 = Server.CreateObject("ADODB.Recordset")
rs2.Open sql, conn2 , 1,1,1
.....
rs2.close
set rs2=nothing
conn2.close
set conn2=nothing

rs1.MoveNext
loop
rs1.close
set rs1=nothing
conn.close
set conn=nothing

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
28
魯大
iT邦高手 1 級 ‧ 2009-03-19 17:18:55
最佳解答

依照你的意思,以下是我的寫法,提供給你做參考

<pre class="c" name="code">Set DBS = Server.CreateObject("ADODB.Connection")
DBS.Open "dsn=資料庫01名稱;uid=帳號;pwd=密碼"
sql="select A from B"
Set rs = DBS.Execute(sql)
rs.movefirst
while Not rs.EOF
Set DBS01 = Server.CreateObject("ADODB.Connection")
DBS01.Open "dsn=資料庫02名稱;uid=帳號;pwd=密碼"
sql01="select C from D"
Set rs01 = DBS01.Execute(sql01)
....
DBS01.close
set rs01=nothing
rs.movenext
wend
魯大 iT邦高手 1 級 ‧ 2009-03-19 19:19:59 檢舉

看到scottchen大的說法
想到的另一寫法,如下:

Set DBS = Server.CreateObject("ADODB.Connection")
DBS.Open "dsn=資料庫01名稱;uid=帳號;pwd=密碼"
Set DBS01 = Server.CreateObject("ADODB.Connection")
DBS01.Open "dsn=資料庫02名稱;uid=帳號;pwd=密碼"
sql="select A from B"
Set rs = DBS.Execute(sql)
rs.movefirst
while Not rs.EOF
sql01="select C from D"
Set rs01 = DBS01.Execute(sql01)
....
set rs01=nothing
rs.movenext
wend
DBS01.close
DBS.close

26
James
iT邦大師 6 級 ‧ 2009-03-19 17:13:22

我比較不喜歡在迴圈裡建立物件,總覺得會被電腦責備「為什麼一下要建一下又要關」,
不過應該都可以啦(反正現在也沒人在乎程式執行的效能),
只要注意建立和關閉的程式碼要放在同一層迴圈就好

贊同
建議考慮用union或join的作法!

22
灌籃高手
iT邦高手 1 級 ‧ 2009-03-19 17:39:27

應該可以共用同一個connection,不需要在迴圈裡面重覆建新的,除非要連到不同的DB,但就算要連到不同的DB,也應該是在迴圈外面建立

jamesjan iT邦高手 1 級 ‧ 2009-03-22 15:27:40 檢舉

如果是有傳回 2 個不同的 recordset
需要各自的 connection
否則資料的參考會不見
導致exception的發生

jamesjan iT邦高手 1 級 ‧ 2009-03-24 08:19:15 檢舉

sorry,記錯了
如果是透過 ADO.Command 傳回 Recordset 才必須指定不同的 Connection
直接透過 Connection 傳回 Recordset 是可以共用的

我要發表回答

立即登入回答