Make SQL Queries over HTTP with XML with VS.NET

This users guide will go through some of the basic steps that one might take in order send an HTTP request to a SQL Server. The request will instruct the SQL server to return XML, which we will parse and display neatly in a grid.RequirementsTo do this, we'll need SQLXML installed on top of SQL Server 2000. We'll also make use of the WebForm and XMLp components included in the IP*Works! .Net Edition. Click here to download ...

Contributed by
Rating: 5 stars5 stars5 stars5 stars5 stars / 6
April 05, 2002
Rate this Article:
MEH MEH++


SEARCH ASP FREE
TOOLS YOU CAN USE

advertisement
This users guide will go through some of the basic steps that one might take in order send an HTTP request to a SQL Server. The request will instruct the SQL server to return XML, which we will parse and display neatly in a grid.
Requirements
To do this, we'll need SQLXML installed on top of SQL Server 2000. We'll also make use of the WebForm and XMLp components included in the IP*Works! .Net Edition. Click here to download a fully functional free trial of this very useful toolkit. For the purposes of this document, we will assume that IP*Works! .Net Edition has already been installed on the readers computer. This toolkit includes sample code for both VB.Net and C#, but here we will be coding in VB.Net.The first thing we need to do is understand how to make the http request to the SQL server. The best resource for this information is of course the help documentation for SQLXML itself. Using this documentation, we learn that we must run a SQLXML configuration application to configure SQLXML with IIS, creating a virtual directory. After that we'll see that the request is sent just like any other HTTP request, on port 80, with a query string containing the SQL query, ie:


"SELECT CustomerId, CompanyName FROM Customer"

http://localhost/sql?sql=select%20CustomerId,%20CompanyName%20from%20Customers%20FOR%20XML%20AUTO

The resulting response is basic unvalidated XML which includes the results of the query. Try typing this in your browser to see the output for yourself (replace http://localhost/sql with your own sql virtual directory).Lets go ahead and get some GUI out of the way. We'll provide only a very few basic inputs for this demo. Textboxes for the URL to use to access the server, a query string, a user name, and password.I have changed the security settings of the IIS virtual directory to use basic authentication rather than windows integrated. NTLM authentication will be supported in the very soon to be released (entering Beta in Spr 2002) IP*Works! .Net SSL Edition.I am using the user name "sa" (system administrator) and the password "" (blank). The "Query" button will simply submit the HTTP request to the server using the WebForm component, receive the information back and parse it to the listview box on the form.[bold]WebForm[/bold]We'll use the WebForm component (rather than HTTP) because it can easily and automatically URL encode the query string information.In order to perform Basic Authentication, set the User and Password properties of the component, ie:


Webform1.User txtUser.Text
Webform1
.Password txtPassword.Text

Next, I set the encoding property of the WebForm component. This property allows me to select between query string (get), multipart/form data (post), or url encoded (post). Then we'll add the variables required in the query string using the AddFormVar method (syntax: AddFormVar(varname, varvalue)). As we see from the SQLXML documentation, the name of the variable is "sql" and the value of that variable is the query that we actually want to send. Then we'll add "FOR XML AUTO;" to instruct the server how to format the data (for more info on data formatting see the SQLXML documentation).


Webform1.Encoding nsoftware.IPWorks.WebformEncodings.encQueryString Webform1.AddFormVar("sql"txtQuery.Text " FOR XML AUTO;"
Webform1.SubmitTo(txtServer.Text

Now the request has been received by the server and the server sends back the XML response. In order to catch this response, we can use either the Webform Transfer event, or the TransferredData property. Right now, we will use the TransferredData property. This property is ready and available as soon as the SubmitTo method returns.[bold]Parsing[/bold]Ok, so we have the XML data - now we will use whatever method to parse this xml and display it in a grid or listview. I am going to demonstrate using the XMLp component to parse this data and split it into a listview. We will dynamically create as many listview columns as there are search terms. For example, in my example we are searching for CustomerId and CompanyName - so there will be two columns in the resulting listview - CustomerId and CompanyName.The XML data that comes back from this request will not be valid, but raw XML with no parent nodes. We'll just add our own parent node quite simply by prepending and appending a root element around the data.


'input the xml data received to the xml parser component 
'
(add "<root>" elementSQLServer does not provide validated XML
Xmlp1.InputText "<root>" Webform1.TransferredData "</root>" 
lvwOutput.Items.Clear() 
lvwOutput.Columns.Clear() 
lvwOutput.Columns.Add("Number"50HorizontalAlignment.Left

'go to the first element and see what type of data we are getting, 
'
set up the appropriate column headers 
Dim i 
As Integer 
Dim j 
As Integer 
Xmlp1
.XPath "/root/[1]"  '[1] is the first child
For i = 1 To Xmlp1.AttrCount 
     '
For every attribute of this first childwe create a matching listview column
     lvwOutput
.Columns.Add(Xmlp1.AttrName(i), (lvwOutput.Width 50) / Xmlp1.AttrCountHorizontalAlignment.Left
     
lvwOutput.Columns(lvwOutput.Columns.Count 1).Text Xmlp1.AttrName(i
Next i 

'Now, go back to the root
Xmlp1.XPath = "/root" 
'
And for every single child of the rootextract the info and add it to the listview
For 1 To Xmlp1.XChildren 
     Xmlp1
.XPath "/root/[" CStr(i) & "]" 
     
lvwOutput.Items.Add(CStr(i)) 
     For 
1 To Xmlp1.AttrCount 
          lvwOutput
.Items(lvwOutput.Items.Count 1).SubItems.Add(Xmlp1.AttrValue(j)) 
     
Next j 
Next i

There are of course many, many ways to parse the data - and many forms that your data might arrive in depending on the query you use. Use any query you like, parse the data any way you prefer. But this simple demonstration shows one easy way to perform SQL queries over HTTP using XML - after you get past the first steps the possibilities are many.[bold]More Information[/bold]For information about the author, please contact lancer@nsoftware.com.For more information about IP*Works! or the WebForm or XMLp components, please visit /n software.Copyright © 2002, Lance Robinson - All Rights Reserved. For publishing permissions, contact lancer@nsoftware.com.
blog comments powered by Disqus
ASP ARTICLES

- Using MySQL with ASP
- ADO for the Beginner
- ADO.NET 101: Data Rendering with a DataGrid ...
- Introducing SoftArtisans OfficeWriter 3.0 En...
- Getting Remote Files With ASP
- The Real Basics of Functions in ASP
- Enhancing Readability with ASP
- Mimicking PHP's String Formatting Functions
- Windows Server Hacks 12, 77, and 98
- How to Sort a Multi-Dimensional Array
- Developing an Information Management Tool wi...
- What are Active Server Pages?
- Getting Remote Pages with ASP
- FTP’ing Files with ASP
- Apply Single-Sign-On to Your Application

ASP Web Hosting ASP.Net Web Hosting Windows Web Hosting
 
 
 

ASP Free Forums 
 RSS  Tutorials RSS
 RSS  Forums RSS
 RSS  All Feeds
Site Map 
Request Media Kit
Write For Us Get Paid 
Weekly Newsletter
 
Developer Updates  
Free Website Content 
Privacy Policy 
Support 


© 2003-2012 by Developer Shed. All rights reserved. DS Cluster 8 - Follow our Sitemap
Most Popular Topics
All ASP.Net Tutorials