我的服务器管理工作室中有很多数据库。在一个数据库中,我正在使用存储过程。我想使用VBScript执行它,并使用记录集将结果存储到文本文件中。有什么可行的方法吗?请帮助我。
这是我的代码:
Const DB_CONNECT_STRING = "Provider=SQLOLEDB.1;Data Source=CIBCWT12;Initial Catalog=dbFXCashCommerceManager;Trusted_Connection=yes;"
SET objFSO = CREATEOBJECT("Scripting.FileSystemObject")
CurrentDirectory = objFSO.GetParentFolderName(WSCript.ScriptFullName)
folder_name = CurrentDirectory & "\ModifReport\" & Replace(Date, "-", "_")
arr = split(folder_name, "\")
path = ""
For Each dir In arr
If path <> "" Then path = path & "\"
path = path & dir
If objFSO.FolderExists(path) = False Then
objFSO.CreateFolder path
End If
Next
'creating the file
set outFile = CreateObject("Scripting.FileSystemObject").CreateTextFile(folder_name & "\ModifReport" & "_" & Replace(Date, "-", "_") &".csv")
Set myConn = CreateObject("ADODB.Connection")
Set myRS = CreateObject("ADODB.recordSet" )
Set cmd = CreateObject("ADODB.Command" )
Set objFileToRead = CreateObject("Scripting.FileSystemObject").OpenTextFile(CurrentDirectory & "\listfile.txt",1)
SQLStr1 = objFileToRead.ReadAll()
objFileToRead.Close
Set objFileToRead = Nothing
myConn.Open DB_CONNECT_STRING
cmd.ActiveConnection = myConn
cmd.CommandText = SQLStr1
cmd.CommandType = 4
'cmd.Execute
'myRS.CursorType = 1
'myRS.Open SQLStr1, myConn, 0, 1, 4
Set myRS = myConn.Execute(SQLStr1,4)
outFile.Writeline "FXO_Warehouse_Code;TrackingNumber;1. Submitted;2. Processing;1-2 Hr;1-2 BHr;Processing Flag;3. Order Released;2-3 Hr;2-3 BHr;Released Flag;4. Order Ack by Branch;3-4 Hr;3-4 BHr;5. Order Completed;4-5 Hr;4-5 BHr;ExpectedDelivery;Order Returned to Intria;Transit;firstname;lastname;Currency Code;FGN Amount;Branch Flag;1-2BD;2-3BD;3-4BD;4-5BD;1-4BD;Brink Del Days;SLA Flag"
msgbox myRS.state
msgbox myConn.state
Do Until myRS.eof
outFile.Writeline myRS.Fields("FXO_Warehouse_Code") & ";" & myRS.Fields("TrackingNumber") & ";" & myRS.Fields("1. Submitted") & ";" & myRS.Fields("2. Processing") & ";" & myRS.Fields("1-2 Hr") & ";" & myRS.Fields("1-2 BHr") & ";" & myRS.Fields("Processing Flag") & ";" & myRS.Fields("3. Order Released") & ";" & myRS.Fields("2-3 Hr") & ";" & myRS.Fields("2-3 BHr") & ";" & myRS.Fields("Released Flag") & ";" & myRS.Fields("4. Order Ack by Branch") & ";" & myRS.Fields("3-4 Hr") & ";" & myRS.Fields("3-4 BHr") & ";" & myRS.Fields("5. Order Completed") & ";" & myRS.Fields("4-5 Hr") & ";" & myRS.Fields("4-5 BHr") & ";" & myRS.Fields("ExpectedDelivery") & ";" & myRS.Fields("Order Returned to Intria") & ";" & myRS.Fields("Transit") & ";" & myRS.Fields("firstname") & ";" & myRS.Fields("lastname") & ";" & myRS.Fields("Currency Code") & ";" & myRS.Fields("FGN Amount") & ";" & myRS.Fields("Branch Flag") & ";" & myRS.Fields("1-2BD") & ";" & myRS.Fields("2-3BD") & ";" & myRS.Fields("3-4BD") & ";" & myRS.Fields("4-5BD") & ";" & myRS.Fields("1-4BD") & ";" & myRS.Fields("Brink Del Days") & ";" & myRS.Fields("SLA Flag")
myRS.MoveNext()
loop
myRS.Close
SET myRS = Nothing
myConn.Close
outFile.Close
msgbox "execution completed"
当我尝试上述代码进行常规查询时,得到了结果。但是,如果我尝试将其用于存储过程,它将显示为“由于对象已关闭,因此不允许进行操作。”
在这里,我正在从文本文件读取存储过程。
为了执行常规查询,我使用了myRS.Open SQLStr1, myConn, 0, 1, 4
对于执行SP,我使用的是Set myRS = myConn.Execute(SQLStr1,4)
我不明白为什么在执行存储过程时记录集会自动关闭。有人可以帮我吗?
答案 0 :(得分:0)
来自存储过程的额外返回消息可能会由于错误而导致ADO结果集过早关闭。因此,当尝试关闭结果集RS时,您将获得“由于对象已关闭,因此无法进行操作”。错误。
在代码正在调用的存储过程中,使用SET NOCOUNT ON强制存储过程不返回受影响的行数。使用SET ANSI_WARNINGS OFF来消除导致VBScript崩溃的存储过程错误的可能性可能也不是明智的。