none
EXPORTAR A EXCEL DATOS DE UNA TABLA EN SQL RRS feed

  • Pregunta

  • HOLA ESTOY REALIZANDO UN PLATAFORMA EN ASP.NET CON LENGUAJE VB Y NECESITO EXPORTAR DATOS DE UNA TABLA DE SQL DANDOLE UN PARAMETRO EN LA APLICACION QUE ESTOY REALIZANDO, LA UNICA FORMA QUE PUDE EXPORTAR DICHOS DATOS FUE UTILIZANDO UN HANDLER(CONTROLADOR GENERICO), PERO SOLAMENTE HACIENDO UN SELECT NORMAL, AHORA NECESITO HACERLO PERO DANDOLE UN PARAMETRO DESDE LA APLICACION WEB.

    LES DEJO EL CODIGO DEL HANDLER

    %@ WebHandler Language="VB" Class="Handler" Debug="true" %>

    Imports System
    Imports System.Web
    Imports System.Data
    Imports System.Data.SqlClient

    Public Class Handler : Implements IHttpHandler


        Public ReadOnly Property IsReusable As Boolean Implements IHttpHandler.IsReusable
            Get
                Throw New NotImplementedException()
            End Get
        End Property

        Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest

            Dim connectionString As String = "Data Source=(Local); Initial Catalog= SPC; Integrated Security= true"
            Using cnn As New SqlConnection(connectionString)


                Dim selectCommand As String = "select tbl_asignacion_criterios.cod_asigcriterio,tbl_asignacion_criterios.cod_edicion,tbl_edicion.nombre_edicion ,tbl_criterios.nombre_criterio,tbl_detalle_asignacion.cod_criterio from tbl_asignacion_criterios  inner join tbl_edicion on tbl_asignacion_criterios.cod_edicion=tbl_edicion.cod_edicion  inner join tbl_detalle_asignacion on tbl_asignacion_criterios.cod_asigcriterio=tbl_detalle_asignacion.cod_criterio inner join tbl_criterios on tbl_detalle_asignacion.cod_criterio=tbl_criterios.cod_criterio  "
                Dim da As New SqlDataAdapter(selectCommand, cnn)
                Dim ds As New DataSet
                da.Fill(ds)
                ExportDataTableToExcel(ds.Tables.Item(0))

            End Using

        End Sub




        Private Sub DoSomething()

        End Sub

        Public Overloads Shared Sub ExportDataTableToExcel(ByVal table As DataTable)
            ExportDataTableToExcel(table, String.Empty, Nothing)
        End Sub
        Public Overloads Shared Sub ExportDataTableToExcel(ByVal table As DataTable, ByVal captions As Dictionary(Of String, String))
            ExportDataTableToExcel(table, String.Empty, captions)
        End Sub
        Public Overloads Shared Sub ExportDataTableToExcel(ByVal table As DataTable, ByVal name As String)
            ExportDataTableToExcel(table, name, Nothing)
        End Sub
        Public Overloads Shared Sub ExportDataTableToExcel(ByVal table As DataTable, ByVal name As String, ByVal captions As Dictionary(Of String, String))
            Dim content As New Text.StringBuilder()
            Dim columnName As String = String.Empty
            For Each column As DataColumn In table.Columns
                If Not captions Is Nothing Then
                    If Not captions.TryGetValue(column.ColumnName, columnName) Then
                        columnName = column.ColumnName
                    End If
                Else
                    columnName = column.ColumnName
                End If
                content.Append(columnName & ";")
            Next
            content.Append(Environment.NewLine)
            Dim value As String
            For Each row As DataRow In table.Rows
                For i As Integer = 0 To table.Columns.Count - 1
                    value = String.Empty
                    If Not row.IsNull(i) Then
                        value = row(i).ToString().Replace(";", String.Empty)
                    End If
                    content.Append(value & ";")
                Next
                content.Append(Environment.NewLine)
            Next
            content.Length = content.Length - 1
            Dim context As HttpContext = HttpContext.Current
            With context.Response
                .Clear()
                .ContentType = "text/csv"
                If String.IsNullOrEmpty(name) Then
                    name = DateTime.Now.ToString("ddMMyyyyHHmmss")
                End If
                .AppendHeader("Content-Disposition", String.Format("attachment; filename={0}.csv", name))
                .Charset = Encoding.Unicode.WebName
                .ContentEncoding = Encoding.Unicode
                .Write(content.ToString())
                .End()
            End With
        End Sub




    End Class

    jueves, 18 de enero de 2018 19:37

Respuestas

  • Hola, se puede acceder a los valores que tengas en session desde un handler,el session lo llenas desde tu aplicacion web

        Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
    
            Dim iCriterio As Int32
            If context.Session("criterio") IsNot Nothing Then
                iCriterio = Convert.ToInt32(context.Session("criterio"))
            End If
            Dim connectionString As String = "Data Source=(Local); Initial Catalog= SPC; Integrated Security= true"
    
            Using cnn As New SqlConnection(connectionString)
                Dim selectCommand As String = "select tbl_asignacion_criterios.cod_asigcriterio,tbl_asignacion_criterios.cod_edicion, " + _
                "tbl_edicion.nombre_edicion, tbl_criterios.nombre_criterio, tbl_detalle_asignacion.cod_criterio " + _
                "from(tbl_asignacion_criterios) " + _
                "inner join tbl_edicion on tbl_asignacion_criterios.cod_edicion=tbl_edicion.cod_edicion" + _
                "inner join tbl_detalle_asignacion on tbl_asignacion_criterios.cod_asigcriterio=tbl_detalle_asignacion.cod_criterio " + _
                "inner join tbl_criterios on tbl_detalle_asignacion.cod_criterio=tbl_criterios.cod_criterio" + _
                "where tbl_detalle_asignacion.cod_criterio=@cod_criterio"
    
                Dim cmd As New SqlCommand(selectCommand, cnn)
                cmd.Parameters.AddWithValue("@cod_criterio", iCriterio)
                Dim da As New SqlDataAdapter(cmd)
                Dim ds As New DataSet
                da.Fill(ds)
                ExportDataTableToExcel(ds.Tables.Item(0))
    
            End Using
        End Sub


    Votar es agradecer.
    Saludos.
    Lima-Perú

    viernes, 19 de enero de 2018 1:30