Conversion ADO vers XML avec .NET 

 

Cette nouvelle version produit directement l'objet DOMDocument. De plus, le traitement est bien plus rapide avec le composant.

La même chose sans .NET

Le Composant :

ADO2XML.VB


  Imports System
  Imports System.Data
  Imports System.Data.OleDb
  Imports System.Xml

  Imports Microsoft.VisualBasic.Strings

  Namespace Intranet

  »  Public Class Tools

  »  »  Public Function ADO2XML(MDB,SQL) As XmlDocument

  »  »  »  Dim ODCom As OleDbCommand = New OleDbCommand
  »  »  »  Dim ODCon As OleDbConnection
  »  »  »  Dim ODDR As OleDbDataReader

  »  »  »  ODCon = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & HttpContext.Current.Server.MapPath(MDB))
  »  »  »  ODCon.Open ()

  »  »  »  ODCom.Connection = ODCon

  »  »  »  ODCom.CommandText = SQL
  »  »  »  ODDR = ODCom.ExecuteReader()

  »  »  »  Dim XD As XmlDocument = New XmlDocument
  »  »  »  XD.LoadXml("<?xml version=""1.0""?><Records/>")

  »  »  »  Dim DE As XmlNode = XD.DocumentElement

  »  »  »  Dim XE1,XE2 As XmlElement

  »  »  »  Dim I As Integer

  »  »  »  While ODDR.Read ()

  »  »  »  »  XE1 = XD.CreateElement("Record")

  »  »  »  »  For I = 0 To ODDR.FieldCount-1

  »  »  »  »  »  XE2 = XD.CreateElement(PROPER(ODDR.GetName(I)))
  »  »  »  »  »  XE2.InnerText = Trim(ODDR.Item(I))
  »  »  »  »  »  XE1.AppendChild(XE2)

  »  »  »  »  Next

  »  »  »  »  DE.AppendChild(XE1)

  »  »  »  End While

  »  »  »  ODDR.Close

  »  »  »  ODCon.Close

  »  »  »  ADO2XML = XD

  »  »  End Function

  »  »  Private Function PROPER(TXT) As String

  »  »  »  PROPER = UCase(Left(TXT,1))+LCase(Mid(TXT,2))

  »  »  End Function


  »  End Class


  End Namespace

 

La compilation :

ADO2XML.MAK


  /out:BIN\ADO2XML.DLL
  /t:LIBRARY
  /r:SYSTEM.DLL,SYSTEM.DATA.DLL,SYSTEM.XML.DLL
  /nologo

Commande


  VBC ADO2XML.VB @ADO2XML.MAK

 

L'utilisation :

SUBJECT1.ASPX


  <%@ Page Language="VB" %>

  <%@ Import Namespace="Homepage" %>

  <% 

  »  A2X("select" & _
  »  »  " S1.SUBJECT as SUBJECT1," & _
  »  »  " count(*) as I " & _
  »  »  "from" & _
  »  »  " BOOKMARK B," & _
  »  »  " SUBJECT1 S1 " & _
  »  »  "where" & _
  »  »  " PUB=2 and" & _
  »  »  " B.S1=S1.S1 and" & _
  »  »  " S1.SUBJECTgt;'' " & _
  »  »  "group by" & _
  »  »  " S1.SUBJECT " & _
  »  »  "order by" & _
  »  »  " S1.SUBJECT")

  »  Session.Abandon

  %>

  <script runat="server">

  »  Sub A2X(SQL)

  »  »  Dim HT As New Homepage.Tools
  »  »  Response.Write(HT.ADO2XML("MyDatabase",SQL).InnerXml)

  »  End Sub

  </script>

 

Le résultat :


  <?xml version="1.0" ?>
  <Records>
  »  <Record>
  »  »  <Subject1>Annuaires</Subject1>
  »  »  <I>40</I>
  »  </Record>
  »  <Record>
  »  »  <Subject1>Certification</Subject1>
  »  »  <I>67</I>
  »  </Record>

  »  ...

  »  <Record>
  »  »  <Subject1>Windows nt</Subject1>
  »  »  <I>55</I>
  »  </Record>
  »  <Record>
  »  »  <Subject1>Windows xp</Subject1>
  »  »  <I>160</I>
  »  </Record>
  </Records>

© Alain Guimberteau