Condividi tramite


Come formattare i valori DateTime e Date nel codice XML estratto da un dataset di ADO.NET tramite Visual Basic .NET

Questo articolo descrive come formattare DateTime e Date i valori delle DataTable colonne nel codice XML estratto da un oggetto ADO.NET DataSet .

Versione originale del prodotto: Visual Basic .NET
Numero KB originale: 811767

Riepilogo

In ADO.NET, i DateTime valori e Date delle DataTable colonne vengono scritti nei formati XSD DateTime e Date quando viene DataSet salvato come XML. I formati XSD DateTime e Date STANDARD sono rispettivamente CCYY-MM-DDThh:mm:ss e CCYY-MM-DD, perché lo schema XSD sottostante dei database esegue il mapping delle DataSetDateTime colonne e Date del database ai DateTime tipi di dati XSD Date e .

Per generare codice XML in cui DateTime i valori e Date sono rappresentati nei formati personalizzati richiesti, utilizzare uno dei metodi seguenti.

Metodo 1: Usare la classe XmlConvert

  1. Aprire Microsoft Visual Studio .NET. In Visual Basic .NET creare un nuovo progetto di applicazione Web ASP.NET denominato DateTimeXmlConvert.

  2. Fare clic con il pulsante destro del mouse sull'area di progettazione di WebForm1.aspx e quindi scegliere Visualizza codice.

  3. Aggiungere il codice seguente alla sezione fine delle Imports direttive in WebForm1.aspx.vb:

    Imports System.Xml
    Imports System.Text
    Imports System.Data.SqlClient
    
  4. Incollare il codice seguente nell'evento Page_Load :

    ' Change SqlServerName, UserId and Password in the following connection string.
    Dim conn As String = "Server=<SQLServerName>; database=Northwind; user id=<UserID>; password=<Password>;"
    Dim connection As SqlConnection = New SqlConnection()
    connection.ConnectionString = conn
    
    Dim objDataSet As DataSet = New DataSet()
    Dim objAdapter As SqlDataAdapter = New SqlDataAdapter()
    Dim objCmd As SqlCommand = New SqlCommand()' Retrieve the first 10 records from the employees table.
    objCmd.CommandText = "select top 10 FirstName,BirthDate from employees"
    objCmd.Connection = connection
    objAdapter.SelectCommand = objCmd
    objAdapter.Fill(objDataSet)
    
    connection.Close()' Create an instance of XmlTextReader class that reads the XML data.
    Dim xmlReader As XmlTextReader = New XmlTextReader(objDataSet.GetXml(),XmlNodeType.Element,Nothing)
    
    Response.ContentType = "text/xml"
    Dim xmlWriter As XmlTextWriter = New XmlTextWriter(Response.OutputStream,Encoding.UTF8)
    xmlWriter.Indentation = 4
    xmlWriter.WriteStartDocument()
    Dim elementName As String = ""
    
    ' Parse & display each node
    While xmlReader.Read()
        Select Case xmlReader.NodeType
            Case XmlNodeType.Element
                xmlWriter.WriteStartElement(xmlReader.Name)
                elementName = xmlReader.Name
    
            Case XmlNodeType.Text
                If elementName.ToLower() = "birthdate" Then
                    xmlWriter.WriteString(XmlConvert.ToDateTime(xmlReader.Value).ToString())
                Else
                    xmlWriter.WriteString(xmlReader.Value)
                End If
    
            Case XmlNodeType.EndElement
                xmlWriter.WriteEndElement()
        End Select
    End While
    xmlWriter.Close()
    
  5. Salvare le modifiche apportate a WebForm1.aspx.vb.

  6. Nel menu Compila scegliere Compila soluzione.

  7. Avviare Microsoft Internet Explorer e aprire WebForm1.aspx specificando l'URL http://IISServerName/DateTimeXmlConvert/WebForm1.aspx , dove IISServerName è il nome del server Microsoft Internet Information Services (IIS).

È ora possibile vedere che il file XML di cui viene eseguito il rendering nel browser viene visualizzato in formato personalizzato DateTime .

Metodo 2: Applicare una trasformazione XSLT nella rappresentazione XML dei dati di DataSet

È possibile usare blocchi di script inline e componenti di codice esterni, noti come oggetti estensione XSLT, per implementare routine personalizzate. Questi vengono richiamati durante un xsLT per eseguire calcoli ed elaborare i dati. Microsoft consiglia di evitare di usare blocchi di script inline. È possibile utilizzare oggetti di estensione per implementare routine personalizzate quando si progettano fogli di stile XSLT portabili.

Creare un modulo Web ASP.NET

  1. Creare un nuovo progetto di applicazione Web visual Basic .NET ASP.NET denominato DateTimeXSLT.

  2. Aggiungere una nuova classe denominata DateConvertor.vb al progetto.

  3. Sostituire il codice esistente con il codice seguente nella DateConvertor classe :

    Public Class DateConvertor
        Public Function GetDateTime(ByVal data As String, ByVal format As String) As String
            Dim dt As DateTime = DateTime.Parse(data)
            Return dt.ToString(format)
        End Function
    End Class
    
  4. Salvare le modifiche apportate a DateConvertor.vb.

  5. Fare clic con il pulsante destro del mouse sull'area di progettazione di WebForm1.aspx e quindi scegliere Visualizza codice.

  6. Aggiungere il codice seguente alla sezione fine delle Imports direttive in WebForm1.aspx.vb:

    Imports System.IO
    Imports System.Xml
    Imports System.Xml.Xsl
    Imports System.Xml.XPath
    Imports System.Data.SqlClient
    
  7. Incollare il codice seguente nell'evento Page_Load :

    ' Change SqlServerName, UserId and Password in the following connection string.
    Dim strConn As String = "Server=<SQLServerName>; database=Northwind; user id=<UserID>; password=<Password>;"
    Dim connection As SqlConnection = New SqlConnection()
    connection.ConnectionString = strConn
    
    Dim objDataSet As DataSet = New DataSet()
    Dim objAdapter As SqlDataAdapter = New SqlDataAdapter()
    Dim objCmd As SqlCommand = New SqlCommand()' Retrieve all records from employees table.
    objCmd.CommandText = "select FirstName,BirthDate from employees"
    objCmd.Connection = connection
    objAdapter.SelectCommand = objCmd
    objAdapter.Fill(objDataSet)
    
    connection.Close()' Create an instance of StringReader class that reads the XML data.
    Dim reader As StringReader = New StringReader(objDataSet.GetXml())
    Dim doc As XPathDocument = New XPathDocument(reader)' Create an XslTransform object and load xslt file.
    Dim transform As XslTransform = New XslTransform()
    transform.Load(Me.MapPath("DateTime.xslt"))'Add an object to convert DateTime format.
    Dim objDateConvertor As DateConvertor = New DateConvertor()
    Dim args As XsltArgumentList = New XsltArgumentList()
    args.AddExtensionObject("urn:ms-kb", objDateConvertor)
    
    transform.Transform(doc, args, Response.OutputStream)
    
  8. Salvare le modifiche apportate a WebForm1.aspx.vb.

Creare un documento XSLT di esempio

  1. Aggiungere un nuovo file XSLT denominato DateTime.xslt al progetto Web DateTimeXSLT ASP.NET.

  2. Sostituire il codice generato con il codice seguente. Usare il Blocco note come strumento intermedio se si verificano problemi di codifica o di caratteri quando si tenta di incollare il codice seguente.

    <?xml version='1.0'?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:myObj="urn:ms-kb">
        <xsl:template match="NewDataSet">
            <table>
                <xsl:attribute name="border">1</xsl:attribute>
                  <TR>
                      <TD>Employee name</TD>
                      <TD>Original DateTime Format</TD>
                      <TD>Changed DateTime Format</TD>
                  </TR>
                <xsl:apply-templates select="*"/>
            </table>
        </xsl:template>
        <xsl:template match="*">
            <TR>
                <xsl:apply-templates select="*"/>
            </TR>
        </xsl:template>
        <xsl:template match="FirstName">
            <TD>
                <xsl:value-of select="."/>
            </TD>
        </xsl:template>
        <xsl:template match="BirthDate">
        <xsl:variable name="Date" select="."/>
            <TD>
                <xsl:value-of select="$Date"/>
            </TD>
            <TD>
                <xsl:value-of select="myObj:GetDateTime($Date, 'F')"/>
            </TD>
        </xsl:template>
    </xsl:stylesheet>
    
  3. Salvare le modifiche apportate a DateTime.xslt.

Testare la trasformazione XSLT usando il modulo Web ASP.NET

  1. Salvare le modifiche apportate al progetto Web DateTimeXSLT ASP.NET.
  2. Nel menu Compila scegliere Compila soluzione.
  3. Avviare Internet Explorer e aprire WebForm1.aspx specificando l'URL http://IISServerName/DateTimeXSLT/WebForm1.aspx , dove IISServerName è il nome del server IIS.

È ora possibile vedere che due DateTime formati, il DateTime formato di DataSet e il formato trasformato DateTime nella pagina WebForm1.aspx .