2011-11-16 38 views
1

目前我正在嘗試爲我們的網站創建一些編碼捷徑。基於ADO的這是編程上的一個壞主意嗎?

GetDBConn返回一個打開的ADO連接對象傳入的連接字符串

GetRS返回記錄集對象:現在來查詢數據庫,並返回一個記錄集2層的功能都被調用。連接和SQL傳遞英寸

set objConn = GetDBConn(connString, commandTimeout, connTimeout, cursorType) 
set objRs = GetRS(objConn, sql) 

我想基本上是寫這兩個作爲一個單一的功能,但我的問題真的成爲這個...我敢肯定,你應該關閉和破壞您的ADO連接時與他們一起完成。如果我dim新函數內部的連接,查詢數據庫並返回記錄集,我不能關閉和銷燬函數內部的連接,否則函數返回的記錄集變得無用(即該連接對象從不明確閉合/破壞)。這可以嗎?它會對SQL/Web服務器產生任何負面影響嗎?

謝謝

+0

請多關注您的標籤選擇......在您下次使用之前檢查「ASP」標籤的描述。 –

+0

@JoelCoehoorn:對不起,我的不好。將來會做。 – Ryan

回答

2

不關閉連接會導致您的SQL服務器資源出現問題。根據您的硬件以及建立了多少連接,您可能沒有發現問題。或者它可能使服務器無法訪問...

2

使用它的記錄集可能不是一個好主意(太容易忘記關閉它們),但是打開/關閉連接應該不成問題。我用我所有的舊的經典ASP網站的以下兩個功能:

conn.asp

<% 
Dim oConn 

Sub openConn() 
    Set oConn = Server.CreateObject("ADODB.Connection") 
    oConn.Open sConn 'connection string here' 
End Sub 

Sub closeConn() 
    If IsObject(oConn) Then 
     On Error Resume Next 
     If oConn.State = 1 Then 
      oConn.Close 
     End If 
     Set oConn = Nothing 
     Err.Clear 
     On Error Goto 0 
    End If 
End Sub 
%> 

然後我包括conn.asp,並在頁面的頂部和closeConn()使用底部openConn()一次。

On Error Resume Next通常被認爲是一個「壞編碼」的做法,但是在這種情況下,我認爲這是在你對那些邊緣的情況下使用closeConn()頁面適當的,否則你會得到錯誤的地方oConn.State由於某種原因失敗。

1

我一直使用的MS參考應用程序所提供的dbhelper.asp FmStocks 的功能總是返回一個斷開連接的記錄,所以你永遠不會有麻煩

得到的功能是像這樣的:

Function RunSQLReturnRS(sqlstmt, params()) 
    On Error Resume next 

    ' Create the ADO objects' 
    Dim rs , cmd 
    Set rs = server.createobject("ADODB.Recordset") 
    Set cmd = server.createobject("ADODB.Command") 

    ' Init the ADO objects & the stored proc parameters' 
    cmd.ActiveConnection = GetConnectionString() 
    cmd.CommandText = sqlstmt 
    cmd.CommandType = adCmdText 
    cmd.CommandTimeout = 900 ' 15 minutes 

    collectParams cmd, params 

    ' Execute the query for readonly' 
    rs.CursorLocation = adUseClient 
    rs.Open cmd, , adOpenForwardOnly, adLockReadOnly 
    If err.number > 0 then 
     BuildErrorMessage() 
     exit function 
    end if 

    ' Disconnect the recordset' 
    Set cmd.ActiveConnection = Nothing 
    Set cmd = Nothing 
    Set rs.ActiveConnection = Nothing 

    ' Return the resultant recordset' 
    Set RunSQLReturnRS = rs 

End Function 
+0

這條線是什麼? 「collectParams cmd,params」 – Dee

+0

另一個函數是收集參數數組並將它們放入命令中。源代碼在答案中鏈接下載。 –

相關問題