My script:
Dim myStream, myConnection, myCommand
Set myStream = CreateObject("ADODB.Stream")
Set myConnection = CreateObject("ADODB.Connection")
Set myCommand = CreateObject("ADODB.Command")
'
myConnection.Open "Provider=SQLOLEDB;Integrated Security=SSPI;" & _
"Persist Security Info=False;Initial Catalog=DSIPAR;Data Source=.\DSIDATA"
myCommand.ActiveConnection = myConnection
myCommand.CommandText = "SELECT itemsgt, item FROM NIFItem"
myStream.Open
myCommand.Properties("Output Stream") = myStream
myCommand.Execute , , adExecuteStream
myStream.Position = 0
myStream.Charset = "ISO-8859-1"
Dim strxml
strxml = myStream.ReadText
MsgBox (strxml)
I can run the script and I can see the query execute on my SQL server instance, but nothing is ever returned to the output stream.
我可以运行脚本,我可以在我的SQL服务器实例上看到查询执行,但是没有任何内容返回到输出流。
1 个解决方案
#1
To retrieve the results into a stream, the query needs to include "FOR XML AUTO". Also change the text adExecuteStream to the constant value 1024.
要将结果检索到流中,查询需要包含“FOR XML AUTO”。同时将文本adExecuteStream更改为常量值1024。
Full Code:
Dim myStream, myConnection, myCommand
Set myStream = CreateObject("ADODB.Stream")
Set myConnection = CreateObject("ADODB.Connection")
Set myCommand = CreateObject("ADODB.Command")
myConnection.Open "Provider=SQLOLEDB;Integrated Security=SSPI;" & _
"Persist Security Info=False;Initial Catalog=DSIPAR;Data Source=.\DSIDATA"
myCommand.ActiveConnection=myConnection
myCommand.CommandText="SELECT itemsgt,item FROM NIFItem FOR XML AUTO"
myStream.Open
myCommand.Properties("Output Stream") = myStream
myCommand.Properties("xml root") = "root"
myCommand.Execute ,,1024 'instead of adExecuteStream
myStream.Position=0
myStream.Charset="ISO-8859-1"
Dim strxml
strxml = myStream.ReadText
MsgBox (strxml)
If you don't need a stream and instead want to read the values of itemsgt and item, try this instead:
如果您不需要流而是想要读取itemsgt和item的值,请尝试以下方法:
Dim myStream, myConnection, myCommand, adoRec
Set myStream = CreateObject("ADODB.Stream")
Set myConnection = CreateObject("ADODB.Connection")
Set myCommand = CreateObject("ADODB.Command")
myConnection.Open "Provider=SQLOLEDB;Integrated Security=SSPI;" & _
"Persist Security Info=False;Initial Catalog=DSIPAR;Data Source=.\DSIDATA"
myCommand.ActiveConnection=myConnection
myCommand.CommandText="SELECT itemsgt,item FROM NIFItem"
SET adoRec = myCommand.Execute()
'Get the first results
If Not adoRec.EOF then
MsgBox "itemsgt = " & adoRec(0) & vbcrlf & "item=" & adoRec(1)
End If
'Iterate through the results
While Not adoRec.EOF
itemsgt = adoRec(0)
item = adoRec(1)
'MsgBox "itemsgt = " & itemsgt & vbcrlf & "item=" & item
adoRec.MoveNext
Wend
#1
To retrieve the results into a stream, the query needs to include "FOR XML AUTO". Also change the text adExecuteStream to the constant value 1024.
要将结果检索到流中,查询需要包含“FOR XML AUTO”。同时将文本adExecuteStream更改为常量值1024。
Full Code:
Dim myStream, myConnection, myCommand
Set myStream = CreateObject("ADODB.Stream")
Set myConnection = CreateObject("ADODB.Connection")
Set myCommand = CreateObject("ADODB.Command")
myConnection.Open "Provider=SQLOLEDB;Integrated Security=SSPI;" & _
"Persist Security Info=False;Initial Catalog=DSIPAR;Data Source=.\DSIDATA"
myCommand.ActiveConnection=myConnection
myCommand.CommandText="SELECT itemsgt,item FROM NIFItem FOR XML AUTO"
myStream.Open
myCommand.Properties("Output Stream") = myStream
myCommand.Properties("xml root") = "root"
myCommand.Execute ,,1024 'instead of adExecuteStream
myStream.Position=0
myStream.Charset="ISO-8859-1"
Dim strxml
strxml = myStream.ReadText
MsgBox (strxml)
If you don't need a stream and instead want to read the values of itemsgt and item, try this instead:
如果您不需要流而是想要读取itemsgt和item的值,请尝试以下方法:
Dim myStream, myConnection, myCommand, adoRec
Set myStream = CreateObject("ADODB.Stream")
Set myConnection = CreateObject("ADODB.Connection")
Set myCommand = CreateObject("ADODB.Command")
myConnection.Open "Provider=SQLOLEDB;Integrated Security=SSPI;" & _
"Persist Security Info=False;Initial Catalog=DSIPAR;Data Source=.\DSIDATA"
myCommand.ActiveConnection=myConnection
myCommand.CommandText="SELECT itemsgt,item FROM NIFItem"
SET adoRec = myCommand.Execute()
'Get the first results
If Not adoRec.EOF then
MsgBox "itemsgt = " & adoRec(0) & vbcrlf & "item=" & adoRec(1)
End If
'Iterate through the results
While Not adoRec.EOF
itemsgt = adoRec(0)
item = adoRec(1)
'MsgBox "itemsgt = " & itemsgt & vbcrlf & "item=" & item
adoRec.MoveNext
Wend