2010-04-27 6 views
0

Comment connecter un Crystal Report (VS 2008 basic) à une base de données MySQL sans utiliser de DSN ou de DataSet préchargé en C#?Comment connecter directement Crystal Reports à MySQL par code C# sans DSN ou un DataSet

J'ai besoin d'installer le programme à plusieurs endroits, donc je dois changer les paramètres de connexion. Je ne veux pas créer un DSN à chaque endroit, ni ne veux précharger un DataSet et le transmettre au moteur de rapports. J'utilise nhibernate pour accéder à la base de données, donc créer et remplir le DS supplémentaire prendrait deux fois le travail et la maintenance supplémentaire plus tard. Je pense que la meilleure option serait de laisser le moteur de rapports de cristal pour se connecter au serveur MySQL par lui-même en utilisant ODBC.

j'ai réussi à créer la connexion dans le concepteur de rapport (VS2008) en utilisant l'expert de la base de données, la création d'une connexion ODBC (RDO) et entrer dans cette chaîne de connexion

« DRIVER = {MySQL ODBC 5.1 Driver}; SERVER = myserver.mydomain "

et dans la page" Next "en remplissant les paramètres" User ID "," Password "et" Database ". Je n'ai pas rempli le paramètre "Serveur". Ça a marché. En fait, si vous utilisez l'ancienne chaîne de connexion, peu importe ce que vous mettez sur le paramètre « Serveur », il semble que le paramètre est utilisé. D'autre part, si vous utilisez « DRIVER = {MySQL ODBC 5.1} Pilote » en tant que chaîne de connexion et de remplir plus tard, le paramètre « Serveur » avec le nom de domaine complet du serveur, la connexion ne fonctionne pas.

Comment puis-je faire cela par code? Tous les exemples que j'ai vus jusqu'à maintenant, utilisent un DSN ou la méthode DataSet. J'ai vu the same question posted but for PostgreSQL et essayé de l'adapter à MySQL, mais jusqu'à présent, sans succès. La première méthode:

Rp.Load(); 
Rp.DataSourceConnections[0].SetConnection("DRIVER={MySQL ODBC 5.1 Driver};SERVER=myserver.mydomain", "database", "user", "pass"); 
Rp.ExportToDisk(ExportFormatType.PortableDocFormat, "report.pdf"); 

une augmentation CrystalDecisions.CrystalReports.Engine.LogOnException pendant ExportToDisk

Message = "Échec de la connexion \ nDetails. IM002: [Microsoft] [ODBC Driver Manager] Nom de la source de données introuvable et aucun pilote par défaut spécifié \ rError dans le chemin du fichier temporel fichier rpt:. \ nImpossible pour se connecter:. sur les paramètres de connexion sont incorrects

le InnerException est un System.Runtime.InteropS ervices.COMException avec le même message et aucune InnerException

Le "aucun pilote par défaut spécifié" me permet de me demander si le paramètre de serveur est également inutilisé ici (voir ci-dessus). Dans ce cas: Comment puis-je spécifier la chaîne de connexion?

Je n'ai pas essayé la deuxième méthode car elle ne s'applique pas.

Est-ce que quelqu'un connaît la solution?

Répondre

0

Je pense qu'il sera probablement plus rapide de générer le Dataset via nHibernate, ou de faire une requête ADO.NET directe, puis d'essayer de résoudre le problème.

+0

Comment puis-je générer l'ensemble de données via NHibernate? Y a-t-il un moyen automatique? (N'ont pas vu quelque façon encore, tous les exemples faire manuellement: navigation dans le graphe d'objet et en ajoutant des lignes une par une) Voilà pourquoi je suis contre cette façon, toute modification du schéma BD, alors je dois changer la DS schéma et la logique de génération aussi pour les garder en phase. Connaissez-vous un moyen automatique? –

+0

OTOH, je patché le programme pour générer une source de données dans le même temps et de faire des rapports utilisent cette source de données. C'est un kludge parce que vous devez être administrateur pour l'ajouter ainsi ....:-( –

+0

Il n'y a pas de moyen rapide d'extraire l'ensemble de données de nHibernate, je voulais simplement créer et remplir vous-même un code, c'est un travail de 10 minutes. – Doobi

Questions connexes