2010-11-30 22 views
5

Je crée un rapport simple en utilisant un objet .NET de mon projet comme source de données, en utilisant la méthode SetDatasource(). Toutefois, lorsque j'exécute le rapport, l'erreur "Echec de l'ouverture de la base de données" s'affiche. Ce rapport ne se connecte pas du tout à une base de données. Ai-je manqué quelque chose ici?Pourquoi "Échec de l'ouverture de la base de données" dans Crystal Reports lors de l'utilisation de l'objet .NET comme source de données?

Un grand merci, D.

AJOUTÉE: Je suppose que ce sera probablement aider si j'inclure l'action du contrôleur. Il est un test rapide et sale, pas ce que la méthode finale ressemblera:

public ActionResult StewardSheets(int showId, int groupId) 
{ 
    ReportClass rptH = new ReportClass(); 
    rptH.FileName = DataHelper.getReportFilePath("Test.rpt",this); 

    NZDSDataContext dataContext = new NZDSDataContext(); 
    var showDetails = (from s in dataContext.Shows 
         where s.ID == showId 
         select new StewardSheetModel 
         { 
          EventDate = s.EventDate.ToLongDateString(), 
          Region = s.Region.Name, 
          ShowTitle = s.Name 
         }).FirstOrDefault(); 

    List<StewardSheetModel> details = new List<StewardSheetModel>(); 
    details.Add(showDetails); 

    rptH.SetDataSource(details); 

    rptH.Load(); 
    Stream stream = rptH.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat); 
    return File(stream, "application/pdf"); 
} 

FIXE: D'oh! J'ai utilisé ReportClass au lieu de ReportDocument. Modification de cette ligne et utilisation de Refresh() car Load() n'est pas une méthode valide. Maintenant, ça fonctionne très bien!

+1

Quels sont les paramètres de source de données? –

+0

Voici une capture d'écran de la source de données - J'espère que c'est ce que vous demandez? http://img262.imageshack.us/img262/3615/crystalreport.png – codedog

Répondre

1

Correction à l'aide de la classe appropriée: ReportDocument au lieu de ReportClass.

2

J'ai commencé à ouvrir ce dialogue après avoir changé le nom de l'objet .NET auquel mes rapports faisaient référence. Pour me débarrasser de la boîte de dialogue, je devais m'assurer qu'aucune des sections ou des champs de mon rapport ne faisait référence à l'ancien nom de l'objet .Net qui était facile à repérer. Le correctif pour moi utilisait la fonction renommer dans l'expert de base de données pour le rapport.

+1

Je n'ai pas changé le nom de la classe .NET depuis la création du rapport. Je ne montre pas non plus le rapport dans un téléspectateur - il est diffusé en tant qu'application/pdf à partir d'un contrôleur MVC. Cette erreur s'est produite la première fois que j'ai appelé cette URL - cela n'a jamais fonctionné ... – codedog

7

Si vous utilisez des DataSets ADO.NET comme source de données, il est possible que la définition DataSet ne soit plus synchronisée avec la définition du rapport. La sélection de l'option Database-> Verify Database dans le menu contextuel du concepteur du rapport permet souvent de résoudre ce problème.

En outre, vous obtiendrez cette erreur si votre rapport a lié des tables et que vous ne parvenez pas à définir la source de données pour l'une des tables. Le correctif consiste soit à supprimer la table du rapport, soit à définir correctement sa source de données. Par exemple, si votre rapport a une table Customers et une table Orders liées ensemble sur une clé, vous devrez définir la source de données pour les deux tables. Si vous oubliez et n'en définissez qu'une, vous obtiendrez une erreur "Erreur d'ouverture de session de base de données", ce qui est assez trompeur.

// Create a new customer orders report. 
CustomerOrdersReport report = new CustomerOrdersReport(); 

// Get the report data. 
DataTable customersTable = getCustomersData(); 
DataTable ordersTable = getOrdersData(); 

// Set datasources. 
report.Database.Tables["Customers"].SetDataSource(customersTable); 
report.Database.Tables["Orders"].SetDataSource(ordersTable); // Don't forget this line like I did!! 
3

Veuillez cliquer avec le bouton droit de la souris sur Rapport -> Base de données-> Vérifier la base de données.

Si une boîte de dialogue apparaît, recherchez votre fichier DataSet .xsd (par exemple DataSet1.xsd) et Apply.

Mon problème a été résolu de cette façon.

1

Je luttais avec cette erreur pendant quelques jours. J'ai un projet .NET webforms qui utilise CrystalReportViewer pour charger un rapport Crystal. Au lieu du chargement du rapport, j'ai continué à obtenir "Échec de la connexion à la base de données".

J'ai ouvert le fichier dans RPT Crystal Report Designer et est allé à Database -> Verify Database

enter image description here

Cela m'a donné une erreur plus spécifique. ENFIN!!!

enter image description here

Je traqué le fichier XSD, déplacé au bon endroit et BOOM

0

Dans mon cas, j'oublie de mettre DataSource à un datatable. quelque chose comme ça

rpt.Database.Tables ("compte"). SetDataSource (CType (DataSource.Account, DataTable))

0

utilisation client natif Version de connexion 10.

0

je devais faire écrire la ligne de code ci-dessous pour se débarrasser de "l'erreur de connexion de base de données"

CrystalDecisions.Shared.TableLogOnInfo li; 
li.ConnectionInfo.IntegratedSecurity = false;