Wednesday, August 25, 2010

Grabar log en SQL SERVER con campo XML

    Private Sub GrabarLogReportes()
        Dim htDescripcion As New Hashtable
        htDescripcion.Add("compania", cboCompania.SelectedValue)
        htDescripcion.Add("anio", cboAnio.SelectedValue)
        htDescripcion.Add("periodo", cboPeriodo.SelectedValue)
        Generico.EscribeLog(servicio, "INEC", txtRuta.Text, htDescripcion)      
    End Sub

----------------------------


Public Shared Sub EscribeLog(ByRef servicio As ServiciosADAM, ByVal reporte As String, ByVal ruta As String, ByVal htDescripcion As Hashtable)
        Dim sql As String
        Dim diccionario As IDictionaryEnumerator
        Dim strBuilder As New System.Text.StringBuilder
        Dim writerSettings As New System.Xml.XmlWriterSettings()
        ' Crear diccionario para poder ser recorrido en la generación de la cadena XML
        diccionario = htDescripcion.GetEnumerator
        ' Crear cadena XML
        With writerSettings
            .Indent = True
            .IndentChars = New String(" "c, 4)
        End With
        Dim writer As System.Xml.XmlWriter = System.Xml.XmlWriter.Create(strBuilder, writerSettings)
        With writer
            .WriteStartElement("Descripcion")
            ' Agregar los componentes del diccionario
            While diccionario.MoveNext
                .WriteElementString(diccionario.Key, diccionario.Value)
            End While
            .WriteEndElement()
        End With
        writer.Flush()
        writer.Close()
        ' Eliminar la primera linea de la cadena XML
        Dim cadenaSaltoLinea As String() = Split(strBuilder.ToString(), vbNewLine)
        Dim descripcion As String
        descripcion = String.Join(vbNewLine, cadenaSaltoLinea, 1, cadenaSaltoLinea.Length - 1)
        ' Llamar al procedimiento almacenado
        Try
            sql = "exec sp_hrv5_ec_log_reportes "
            sql += "'" & reporte & "', "
            sql += "'" & ADAM.Framework.Windows.ConexionActual.Usuario & "', "
            sql += "'" & ruta & "', "
            sql += "'" & descripcion & "'"
            If (servicio.ejecutaConsulta(sql, ConexionActual.conexionBD) <> 1) Then
                Throw New Exception("La generación del reporte no pudo ser registrada en el log de la base de datos.")
            End If
        Catch ex As Exception
            MuestraErrorAdam(ex)
        End Try
    End Sub


BD
--------------------------------------------------

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO

CREATE TABLE hrec_log_reportes(
    [tipo_reporte] [varchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [fecha_emision] [datetime] NULL,   
    [usuario] [varchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [ruta_emision] [varchar](200) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [descripcion] XML NULL
    --[descripcion] [varchar](500) NULL
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF

--DROP TABLE  [dbo].hrec_log_reportes




------------------------------------------------------------


IF OBJECT_ID('sp_hrv5_ec_log_reportes') IS NOT NULL
    DROP PROCEDURE sp_hrv5_ec_log_reportes
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[sp_hrv5_ec_log_reportes]
(
    @tipo_reporte  VARCHAR(10),
    @usuario       VARCHAR(20),
    @ruta_emision  VARCHAR(200),
    @descripcion   XML
)
AS
    INSERT INTO hrec_log_reportes
      (
        tipo_reporte,
        fecha_emision,
        usuario,
        ruta_emision,
        descripcion
      )
    VALUES
      (
        @tipo_reporte,
        GETDATE(),
        @usuario,
        @ruta_emision,   
        @descripcion
      )
GO







No comments:

Post a Comment