none
Error al ejecutar CrystalReports en procedimiento CLR RRS feed

  • Pregunta

  • Hola muy buenos dias!!!

    Actualmente tengo un problema al generar un reporte de crystal mediante la ejecución de un procedimiento almacenado CLR.

    He creado un proyecto el cual contiene un procedimiento CLR, un dataset y un reporte(.rpt) de Crystal Reports.

    He implementado el siguiente codigo en el cuerpo del procedimiento:

    Imports System
    Imports System.Data
    Imports System.Data.SqlClient
    Imports System.Data.SqlTypes
    Imports Microsoft.SqlServer.Server
    
    
    Partial Public Class StoredProcedures
        <Microsoft.SqlServer.Server.SqlProcedure()> _
        Public Shared Sub spReporte(ByVal id As Integer)
            ' Agregar el código aquí
            SqlContext.Pipe.Send("Declarando reporte")
            Dim crs As crTst
            SqlContext.Pipe.Send("Instanciando reporte")
            Try
                crs = New crTst
            Catch ex As Exception
                SqlContext.Pipe.Send("this are the error: " & ex.Message)
            End Try
            SqlContext.Pipe.Send("Creando origenes de datos")
            Dim dsTST As New DataSet
            Dim tabla As New DataTable
            tabla.TableName = "tabla"
            tabla.Columns.Add("Id")
            tabla.Columns.Add("Nombre")
            SqlContext.Pipe.Send("Agregando Rows")
            tabla.Rows.Add("1", "Victor")
            tabla.Rows.Add("2", "Gaby")
            dsTST.Tables.Add(tabla)
            SqlContext.Pipe.Send("Asignando origenes de datos")
            crs.SetDataSource(dsTST)
            SqlContext.Pipe.Send("Terminó proceso")
        End Sub
    End Class
    


    Lo que realicé para que el procedimiento almacenado pudiera utilizar las dll de crystalreports fue registrarlas en el SQL mediante:

    CREATE ASSEMBLY [CrystalDecisions.Shared]
    FROM 'D:\dll\CrystalDecisions.Shared.dll'
    WITH PERMISSION_SET = UNSAFE;
    

    Así pues a la hora de ejecutar el procedimiento almacenado detiene el servicio de SQL.

    He notado que el error ocurre al crear una nueva instancia del reporte.

     crs = New crTst
    


    Me podrian ayudar por favor, estoy desesperado. Es esta la forma correcta de realizarlo o existe alguna otra forma???.

    Alguna idea??

    Muchisimas gracias de antemano

    Saludos.

    Atte. Victor Ramos.

     

    lunes, 12 de septiembre de 2011 16:52

Respuestas

  • Hola.

    Creo que sería mucho más sencillo que en lugar de llevar todo el proceso a un procedimiento almacenado llevaras el procedimiento almacenado al proceso. Así, preparas un ejecutable que lance ese proceso, que haga la factura, la deje en un directorio y luego la guarde en una tabla. Es decir, que sea una aplicación y no SQL Server quien se ocupe.

    Llevar la generación del informe al motor suena bastante más peligroso.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    • Marcado como respuesta Victor Ram jueves, 15 de septiembre de 2011 18:31
    lunes, 12 de septiembre de 2011 18:54

Todas las respuestas

  • Creo que te podrian ayudar mas en un foro de .NET...

    Saludos!


    Fredy R.(Co)
    lunes, 12 de septiembre de 2011 18:18
  • Hola.

    ¿Cuál es el motivo por el que pretendes crear un informe de Crystal Report desde SQL Server, pero desde CLR? No parece que tenga mucho sentido. Si nos cuentas la funcionalidad que precisas cubrir, a lo mejor podemos darte alguna indicación para lograrlo.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    lunes, 12 de septiembre de 2011 18:28
  • Hola muy buenas tardes

    Muchisimas gracias por su atención, y bueno el motivo por el cual necesito realizar esto es porque actualmente se tiene una aplicación la cual con codigo VB.net genera una factura usando CrystalReports.

    Dicha aplicación guarda la factura hecha en un directorio. Se tienen varias plantillas ya realizadas.

    Ahora lo que se pretende es generar la factura despues de realizar un cierto proceso dentro de un procedimiento almacenado y que genere la factura. Reutilizando ese mismo codigo.

    La factura una vez generada guardarla en un camplo BLOB de una tabla de la base de datos.

    Es por ello que al ejecutar un procedimiento almacenado quiero mandar llamar este procedimiento CLR el cual genere la facture la guarde y avise al procedimiento principal el estatus del proceso(exitoso o no).

    Espero y me pudieran ayudar y muchisimas gracias de antemano.

    Saludos.

     

    lunes, 12 de septiembre de 2011 18:40
  • Hola.

    Creo que sería mucho más sencillo que en lugar de llevar todo el proceso a un procedimiento almacenado llevaras el procedimiento almacenado al proceso. Así, preparas un ejecutable que lance ese proceso, que haga la factura, la deje en un directorio y luego la guarde en una tabla. Es decir, que sea una aplicación y no SQL Server quien se ocupe.

    Llevar la generación del informe al motor suena bastante más peligroso.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    • Marcado como respuesta Victor Ram jueves, 15 de septiembre de 2011 18:31
    lunes, 12 de septiembre de 2011 18:54