2009-05-15 15 views
5

マイスクリプト:SQL Server 2005からXMLデータを取得する方法は?

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インスタンス上で実行見ることができますが、何も今までに出力ストリームに返されません。

+0

Joseが指摘したように、SQL文は情報をXML形式で取得しません。つまり、FOR XMLを使用していません。 – shahkalpesh

答えて

5

結果をストリームに取得するには、クエリに「FOR XML AUTO」を含める必要があります。あなたは、ストリームを必要とし、代わりにitemsgtと項目の値を読みたい、代わりにこれを試していない場合は

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) 

も一定の値に1024

完全なコードをテキストadExecuteStreamを変更

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 
+0

ストリームを必要としているのは、出力を取り出してメッセージキューメッセージに送信しているからです。私の元のスクリプトでは、XML AUTOのために指定した規約を使用していましたが、私は問題からXMLフォーマットを取り除くことによって物事を単純化していると思っていました。あなたの提案したレコードセットを試してみると、私は何かを得ることができます。 –

+0

私の投稿を更新しました。 XML AUTOの一部が抜けていて、もう1つの問題はmyCommand.Execute ,, adExecuteStreamです。これを1024に変更すると動作します。 –

+0

多くのおかげで、それは推奨変更とうまく動作します。 –

関連する問題