2010-03-25 87 views
5

Necesito recuperar el nombre del procedimiento almacenado que se está ejecutando un informe de Crystal. ¿Hay alguna manera de hacer esto en C# utilizando el objeto CrystalDecisions.CrystalReports.Engine.ReportDocument?Encontrar el procedimiento almacenado que usa Crystal Report

Parece que no puedo encontrar una propiedad que me dé el nombre del procedimiento almacenado.

¿Esto es posible? He pasado por casi todas las propiedades que se me ocurren. El objeto DataDefinition tiene colecciones para la Fórmula, Parameter, Group Name y Running Total Fields, pero no para los campos de la base de datos.

Editar: Tengo que hacer esto programáticamente, ya que tengo muchos informes. Necesito la opción de omitir la ejecución real del informe y simplemente ejecutar el procedimiento almacenado que el informe habría utilizado. Entonces, cuando la información del informe se inserta en la base de datos utilizando el programa, quiero poder extraer su procedimiento almacenado y almacenar esa información por separado.

+0

Al igual que una sola vez o mediante programación? Si es solo una vez, le sugiero que adjunte el generador de perfiles de sql a la base de datos en cuestión, invoque el informe y vea qué hace. –

+0

Programaticamente. De hecho, tenemos algunos cientos de informes, pero algunos usuarios quieren la opción de ejecutar el procedimiento almacenado directamente y exportar los resultados a un archivo CSV.Esto funciona para casi todos los informes, porque tenemos una práctica de nomenclatura estándar para procedimientos almacenados, pero hay algunos casos extraños. En lugar de tener que mantener una lista, prefiero poder sacarla del informe y ponerla en la base de datos en alguna parte. – Brandon

Respuesta

4

Vas a patearte a ti mismo. Los de SP están en ...

ReportDocument.Database.Tables

DataBase

continuación Table.Location

Table

también no se olvide de Subinformes ... que es otra colección de ReportDocuments.

+0

Muchas gracias. Me acabas de ahorrar un montón de trabajo, y me estoy pateando a mí mismo por no verificar el objeto Table: P – Brandon

1

Puede usar SQLServer Profiler para capturar a qué procedimiento almacenado se está llamando cuando ejecuta el informe de Crystal.

Primero, debe tener los privilegios correctos para ejecutar el generador de perfiles.
En segundo lugar, debe comenzar a rastrear e inmediatamente ejecutar el informe.
En tercer lugar, detenga el rastreo & para ver el nombre de los procedimientos almacenados que se ejecutó el informe.

+0

Gracias por la respuesta, pero en realidad necesito hacer esto programáticamente. – Brandon

+0

¿Podría intentar abrir el informe en un editor como Wordpad o xmlnotepad? Tal vez eso podría tener algunos metadatos que puede buscar el sproc. – SoftwareGeek

0

Puede dar salida a las diversas propiedades de una tabla con el código (lo siento es en VB, eso es lo que tengo que utilizar para este proyecto):

Private Sub logLogOnInfo (tabla como tabla) log.DebugFormat ("LogOnInfo.ConnectionInfo para {0}:", table.Name) Dim ci Como ConnectionInfo = table.LogOnInfo.ConnectionInfo log.Debug (String.Format ("AllowCustomConnection: {0}, DBName: {1}, IntegratedSecurity: {2} ", ci.AllowCustomConnection, ci.DatabaseName, ci.IntegratedSecurity)) log.Debug (String.Format (" Nombre del servidor: {0}, Usuario: {2}, Contraseña: {1}, Atributos: ", ci.ServerName, ci.Password, ci.UserID))

For Each a As NameValuePair2 In ci.Attributes.Collection 
    If a.Name = "QE_LogonProperties" Then 
     Dim attributes As DbConnectionAttributes = a.Value 
     For Each b As NameValuePair2 In attributes.Collection 
      log.DebugFormat("  {0}: {1}", b.Name, b.Value) 
     Next 
    Else 
     log.DebugFormat(" {0}: {1}", a.Name, a.Value) 
    End If 
Next 

End Sub

Cuestiones relacionadas