KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

Q271620: HOWTO: Retrieve XML Data Using SQL XML Query in VB Client

Article: Q271620
Product(s): Microsoft Visual Basic for Windows
Version(s): 2.6,2.7,4.0,6.0
Operating System(s): 
Keyword(s): kbVBp600 kbXML kbGrpDSVBDB kbDSupport kbSQLServ2000 kbMDAC260 kbMSXML260 kbATM kbmdac27
Last Modified: 12-OCT-2001

-------------------------------------------------------------------------------
The information in this article applies to:

- Microsoft Visual Basic Professional Edition for Windows, version 6.0 
- Microsoft Visual Basic Enterprise Edition for Windows, version 6.0 
- Microsoft Data Access Components versions 2.6, 2.7 
- Microsoft SQL Server 2000 (all editions) 
- Microsoft XML, versions 2.6, 4.0 
-------------------------------------------------------------------------------

SUMMARY
=======

If you run an ADODB command stream and specify SQL SELECT with the FOR XML AUTO
clause, an XML document stream is fetched from SQL Server and displayed in the
Visual Basic Intermediate window.

MORE INFORMATION
================

1. Create a new Visual Basic Standard EXE. Form1 is created by default.

2. On the Project menu, select References, and then set a reference to Microsoft
  ActiveX Data Objects 2.6.

3. Place a CommandButton on Form1, and then place the following code in its
  click event:

  Private Sub Command1_Click()
    
      Dim sConn As String
      Dim sQuery As String
      Dim outStrm
          
      sConn = "Provider=SQLOLEDB;Data Source=.;Initial Catalog=Northwind;User ID=SA;Password=;"
      Dim adoConn As ADODB.Connection
      Set adoConn = New ADODB.Connection
      adoConn.ConnectionString = sConn
      adoConn.CursorLocation = adUseClient
      adoConn.Open
      
      Dim adoCmd As ADODB.Command
         Set adoCmd = New ADODB.Command
         Set adoCmd.ActiveConnection = adoConn
         sQuery = "<ROOT xmlns:sql='urn:schemas-microsoft-com:xml-sql'>" 
         sQuery = sQuery & "<sql:query>SELECT * FROM PRODUCTS FOR XML AUTO</sql:query>"'
         sQuery = sQuery & "</ROOT>"
      
      Dim adoStreamQuery As ADODB.Stream
      Set adoStreamQuery = New ADODB.Stream
      
      '   Open the command stream so it may be written to
      adoStreamQuery.Open                             
      '   Set the input command stream's text with the query string
      adoStreamQuery.WriteText sQuery, adWriteChar    
      '   Reset the position in the stream, otherwise it will be at EOS.
      adoStreamQuery.Position = 0                     
      
      '   Set the command object's command to the input stream set above.
      Set adoCmd.CommandStream = adoStreamQuery       
      '   Set the dialect for the command stream to be a SQL query.
      adoCmd.Dialect = "{5D531CB2-E6Ed-11D2-B252-00C04F681B71}"   
      
      '   Create the output stream to stream the results into.
      Set outStrm = CreateObject("ADODB.Stream")      
      outStrm.Open

      '   Set command's output stream to the output stream just opened.
      adoCmd.Properties("Output Stream") = outStrm    
      
      '   Execute the command, thus filling the output stream.
      adoCmd.Execute , , adExecuteStream              
      '   Position the output stream back to the beginning of the stream.
      outStrm.Position = 0                            
      '   Create temporary string.
      Dim str As String                               
      '   Assign the stream's output to the temp string to format.
      str = outStrm.ReadText(-1)                      
      '   Add a cr/lf pair for each row in the result stream.
      str = Replace(str, "><", ">" & vbCrLf & "<")    
      Debug.Print str
      GoTo Bye
      
  RecError:
      Debug.Print Err.Number & ": " & Err.Description
      
  Bye:
      Set adoCmd = Nothing
      If adoConn.State = adStateOpen Then
          adoConn.Close
      End If
      Set adoConn = Nothing
  End Sub 

4. Specify either the SQL 2000 Server or, if the server is on your local
  machine, use the period symbol (.) or "(local)" (without the quotation
  marks). Note that the Immediate window of Visual Basic displays the results.

REFERENCES
==========

For information on SQL 2000 and mapping schema, please see SQL Server Books
Online

For XML, please see the XML information on MSDN on the following Microsoft Web
site:

  http://www.msdn.microsoft.com/xml/default.asp

Additional query words:

======================================================================
Keywords          : kbVBp600 kbXML kbGrpDSVBDB kbDSupport kbSQLServ2000 kbMDAC260 kbMSXML260 kbATM kbmdac270 kbMSXML400 
Technology        : kbVBSearch kbSQLServSearch kbAudDeveloper kbZNotKeyword6 kbMSXMLSearch kbSQLServ2000Search kbZNotKeyword2 kbVB600Search kbVB600 kbMDACSearch kbMDAC260 kbSQLServ2000 kbMSXML260 kbMDAC270 kbMSXML400
Version           : :2.6,2.7,4.0,6.0
Issue type        : kbhowto

=============================================================================

THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Copyright Microsoft Corporation 1986-2002.