2011-12-08 46 views
0

函數應該只取連接字符串和一個SQL查詢作爲輸入,並將其應該連接到任何數據庫(SQL,ORACLE,SYBASE,MS ACCESS)和執行任何查詢我已經作爲參數傳遞給函數。一個通用的VBScript函數連接到任何數據庫並執行任何SQL查詢

我已經寫了下面的函數,該函數的任務,能否請您一次檢查並告訴我,這是正確的還是請告訴我,如果我錯了,任何地方。

Public Function ConnectDB (strCon, strQuery) 
Set objConnection = CreateObject("ADODB.Connection") 
Set objRecordSet = CreateObject("ADODB.Recordset") 
objConnection.Open strCon 

objRecordSet.Open strQuery,objConnection 
objRecordSet.MoveFirst 
Do Until objRecordset.EOF 
Msgbox "Number of records: " & objRecordset.RecordCount 
Msgbox objRecordset(0) 
Msgbox objRecordset(1) 
    objRecordset.MoveNext 
Loop 
objRecordSet.Close 
objConnection.Close 
Set objConnection = Nothing 
Set objRecordSet = Nothing 
End Function 
Call ConnectDB ("Provider = Microsoft.Jet.OLEDB.4.0; " & _ 
      "Data Source = inventory.mdb","SELECT * FROM EMP ORDER BY EMPName") 

UPDATE:
非常感謝你的答覆。

其實我已被要求寫入執行連接到任何數據庫並執行在連接的數據庫中的任何查詢(由用戶給出)的任務的功能。

我已經開始學習VBScript和想擁有的編寫函數深入的知識。 Ekkehard horner能否請你告訴我在哪裏閱讀以瞭解所有關於例程(函數和子程序)的知識。目前,我只有關於例程的基本概念,並且我提到了MSDN,他們只給出了基本信息。請幫助我在哪裏學習更多關於例程的內容。編寫程序是非常困難的,不知道它們是否正確。

嗨Sanpaco,下面是我寫的類。請檢查一次,並讓我知道更正。 我很新VBScript.Suggest我的方式來提高我的編程知識。

Class DBCommunicator 
Public Function DBConnect(StrCon) 
Option Eplicit 
Dim oConn 
set oConn = CreateObject("ADODB.Connection") 
oConn.Open Strcon 
Function DBConnect = True 
End Function 

Public Function QueryDB(StrQuery) 
Option Eplicit 
Dim oRst, oField 
set oRst = CreateObject("ADODB.recordset") 
oRst.Open "StrQuery", oConn 
Do Until oRst.EOF 
For each oField in oRst.Fields   
Print oField.Name & " = " & oField.Value  
Next 
oRst.MoveNext 
loop 

Public Function DBdisConnect 
oRst.close 
oConn.close 
End Function 
End Class 

######################################## 

Option Explicit 
Dim strResult 
strResult=DBCommunicator.DBConnect("<<Connection String of any database User want to connect>>") 
    If strResult<>True Then 
     wscript.echo "DB Connection Failed" 

    End If 
DBCommunicator.QueryDB("Select * from EMP") 
DBCommunicator.DBdisConnect 
+1

你爲什麼不嘗試,讓我們知道,如果有什麼差錯? – 2011-12-08 12:37:31

回答

1

一個例程(子或函數)應該完成一個可重複/可重用的任務。您的 函數創建,打開和關閉連接,創建,使用和關閉記錄集,並用消息框來惹惱用戶。如果你想要做的事 明智的明天,你得寫(通過複製粘貼& &修改)另一 程序。

函數應該返回一個值;你的不。一個功能應該沒有 副作用;你做IO。例程的工作/執行應該由其參數單獨確定;你的取決於默認設置/值 爲許多參數你沒有提供.Open方法。

代碼不應該包含脂肪; .FoveFirst在.EOF循環之前,在循環中顯示 .RecordCount,並在例程結束之前將對象變量設置爲Nothing立即爲 。 VBScript代碼應該以「Option Explicit」開頭;你顯然沒有。

雖然當您學習 或調查時,某個特定DBMS的獨立性很有吸引力,但真正世界問題的專業解決方案應該基於針對該任務的「最佳」DBMS決策;這將導致 使用DBMS特定功能的DBMS特定代碼。然後通過改變ConnectionString從一個DBMS切換到另一個DBFS是錯覺的。

數據庫的工作或者是的 .net的ADO或「經典的」 ADO的「連接上啓動做很多不同的事情,斷開對 終止」風格「連接,做一件事斷開」的風格。如果您指出,您需要考慮什麼樣的任務 ,我可能願意附加到這個答案。

0

你可能會考慮創建一個DatabaseCommunicator的類,它獨立的數據庫功能(連接,的executeQuery,斷開),而不是試圖做的一切有一種方法。另外,如果您想要動態使用不同類型的提供程序,那麼您需要驗證查詢格式,以確保它使用正確的語法用於您正在使用的任何提供程序。

你如何完成這個任務,你應該把它在我會在看到很感興趣。

+0

我會嘗試你所說的,並會在幾分鐘內發佈。 – Reza

+0

我很想知道你是如何解決這個問題的? – sanpaco

相關問題