Vbscript 如何从SQLServer2005检索XML数据?

Vbscript 如何从SQLServer2005检索XML数据?,vbscript,Vbscript,我的剧本: 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;

我的剧本:

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)

我可以运行脚本,并且可以看到查询在我的SQL server实例上执行,但是输出流中不会返回任何内容。

要将结果检索到流中,查询需要包含“FOR XML AUTO”。同时将文本adExecuteStream更改为常量值1024

完整代码:

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)
如果您不需要流,而是希望读取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

正如Jose所指出的,SQL语句不会以XML的形式检索信息。i、 e.它没有使用XML。我想要流的原因是我获取输出并将其发送到消息队列消息。我的原始脚本使用了您为XMLAuto指定的约定,但不起作用,我认为我通过从问题中删除XML格式简化了事情。我会尝试你建议的记录集,只是为了向自己证明我能得到一些回报。我刚刚更新了我的帖子。XML自动丢失的一部分,另一个问题是myCommand.Execute,adExecuteStream的行-将其更改为1024,它将工作。我在这里观察到,如果SQL列定义为“nvarchar(max)”类型,VBS(记录集)无法提取数据。我不确定我是对还是错。你能分享一下你的观点或经验吗。