简体   繁体   中英

Need to read inline query from xml file and execute using Vb.net

Attached the code above

<?xml version="1.0" encoding="UTF-8"?>
<QUERIES>
  <QUERY ID="XLIGR">
      SELECT trim(QUERY.CDKEY1) as Product, trim(QUERY.CDKEY2) as QUERY, trim(QUERY.CDDESC) as Description,QUERY.EFFDTE as Effective_Date,
      QUERY.ENDDTE as Expire_Date FROM XLINS.DWXF347 QUERY WHERE QUERY.GRP = 'XLIGR' UNION SELECT trim(CanadaQUERY.CDKEY1) as Product, 
      trim(CanadaQUERY.CDKEY2) as QUERY, trim(CanadaQUERY.CDDESC) as Description,CanadaQUERY.EFFDTE as Effective_Date,CanadaQUERY.ENDDTE as Expire_Date
      FROM XLCANADA.DWXF347 CanadaQUERY WHERE CanadaQUERY.GRP = 'XLESCAN'
  </QUERY>
  <QUERY ID="XLIE">
      SELECT trim(QUERY.CDKEY1) as Product, trim(QUERY.CDKEY2) as QUERY, trim(QUERY.CDDESC) as Description,QUERY.EFFDTE as Effective_Date,
      QUERY.ENDDTE as Expire_Date FROM XLINS.DWXF347 QUERY WHERE (QUERY.GRP = 'XLDATA' OR QUERY.GRP='MIDMARKET')UNION SELECT trim(CanadaQUERY.CDKEY1) as Product,
      trim(CanadaQUERY.CDKEY2) as QUERY, trim(CanadaQUERY.CDDESC) as Description,CanadaQUERY.EFFDTE as Effective_Date,CanadaQUERY.ENDDTE as Expire_Date 
      FROM XLCANADA.DWXF347 CanadaQUERY WHERE (CanadaQUERY.GRP = 'XLESCAN' OR CanadaQUERY.GRP='CANDATA')
  </QUERY>
  <QUERY ID="XLES">
      SELECT trim(QUERY.CDKEY1) as Product, trim(QUERY.CDKEY2) as QUERY, trim(QUERY.CDDESC) as Description,QUERY.EFFDTE as Effective_Date,
      QUERY.ENDDTE as Expire_Date FROM XLINS.DWXF347 QUERY WHERE QUERY.GRP = 'XLES' UNION SELECT trim(CanadaQUERY.CDKEY1) as Product, 
      trim(CanadaQUERY.CDKEY2) as QUERY, trim(CanadaQUERY.CDDESC) as Description,CanadaQUERY.EFFDTE as Effective_Date,CanadaQUERY.ENDDTE as Expire_Date 
      FROM XLCANADA.DWXF347 CanadaQUERY WHERE CanadaQUERY.GRP = 'XLESCAN'
  </QUERY>
  <QUERY ID="XLIN">
      SELECT trim(QUERY.CDKEY1) as Product, trim(QUERY.CDKEY2) as QUERY, trim(QUERY.CDDESC) as Description,QUERY.EFFDTE as Effective_Date,
      QUERY.ENDDTE as Expire_Date FROM INCOMING.DWXF347 QUERY WHERE QUERY.GRP = 'INCOMING' UNION SELECT trim(CanadaQUERY.CDKEY1) as Product, 
      trim(CanadaQUERY.CDKEY2) as QUERY, trim(CanadaQUERY.CDDESC) as Description,CanadaQUERY.EFFDTE as Effective_Date,CanadaQUERY.ENDDTE as Expire_Date 
      FROM XLCANADA.DWXF347 CanadaQUERY WHERE CanadaQUERY.GRP = 'XLESCAN'
  </QUERY>
  <QUERY ID="XLSP">
      SELECT trim(QUERY.CDKEY1) as Product, trim(QUERY.CDKEY2) as QUERY, trim(QUERY.CDDESC) as Description,QUERY.EFFDTE as Effective_Date,
      QUERY.ENDDTE as Expire_Date FROM XLINS.DWXF347 QUERY WHERE QUERY.GRP = 'XLSELPROF' UNION SELECT trim(CanadaQUERY.CDKEY1) as Product, 
      trim(CanadaQUERY.CDKEY2) as QUERY, trim(CanadaQUERY.CDDESC) as Description,CanadaQUERY.EFFDTE as Effective_Date,CanadaQUERY.ENDDTE as Expire_Date 
      FROM XLCANADA.DWXF347 CanadaQUERY WHERE CanadaQUERY.GRP = 'XLESCAN'
  </QUERY>
  <QUERY ID="XLCN">
      SELECT trim(QUERY.CDKEY1) as Product, trim(QUERY.CDKEY2) as QUERY, trim(QUERY.CDDESC) as Description,QUERY.EFFDTE as Effective_Date,
      QUERY.ENDDTE as Expire_Date FROM XLINS.DWXF347 QUERY WHERE QUERY.GRP = 'CONSTRUCT' UNION SELECT trim(CanadaQUERY.CDKEY1) as Product, 
      trim(CanadaQUERY.CDKEY2) as QUERY, trim(CanadaQUERY.CDDESC) as Description,CanadaQUERY.EFFDTE as Effective_Date,CanadaQUERY.ENDDTE as Expire_Date 
      FROM XLCANADA.DWXF347 CanadaQUERY WHERE CanadaQUERY.GRP = 'XLESCAN'
  </QUERY>
<QUERIES>

I need to read the inline and execute in VB.net and then call the same using c# code. I have tried hard coding and execute the query in vb .net and obtained the resultset as dataset

private string GetSymbol(String argQueryID)
        {
            string l_Query;
            XmlDocument l_XmlDoc = new XmlDocument();
            //load the xml file 
            l_XmlDoc.Load(Server.MapPath("~/XML/Queries.config"));
            l_Query = l_XmlDoc.SelectSingleNode("/QUERIES/QUERY[@ID='" + argQueryID + "']").InnerText;
            return l_Query;
        }

You can create classes which correspond to your xml file, and use serialization / deserialization to read the file and iterate or select your queries.

Model:

<Xml.Serialization.XmlRoot("QUERIES")>
Public Class Queries
    <Xml.Serialization.XmlElement("QUERY")>
    Public Property Queries As List(Of Query)
    <Xml.Serialization.XmlIgnore>
    Default Public ReadOnly Property Index(ID As String) As String
        Get
            Return Queries.SingleOrDefault(Function(q) q.ID = ID)?.CommandText
        End Get
    End Property
End Class

Public Class Query
    <Xml.Serialization.XmlAttribute>
    Public Property ID As String
    <Xml.Serialization.XmlText>
    Public Property CommandText As String
End Class

Test code:

Dim mySerializer As New Xml.Serialization.XmlSerializer(GetType(Queries))
Dim myQueries As Queries ' will hold your query objects
Using sr As New IO.StreamReader("filename.xml")
    myQueries = DirectCast(mySerializer.Deserialize(sr), Queries)
End Using
For Each myQuery In myQueries.Queries ' iterate over query objects
    Console.WriteLine($"Query ID={myQuery.ID}, CommandText='{myQuery.CommandText}'")
Next
Dim myCommandText = myQueries("XLSP") ' get the query with ID XLSP
Console.WriteLine($"XLSP CommandText='{myCommandText}'")
myCommandText = myQueries("ABCD") ' get a query which doesn't exist (returns "")
Console.WriteLine($"ABCD CommandText='{myCommandText}'")

Now you have your queries, and you can execute them in your database

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM