2010-05-11 5 views
5

Après avoir passé une bonne 3 à 4 heures sur Google en essayant de trouver une solution à mon problème, je ne l'ai pas eu beaucoup de chance. Fondamentalement, nous utilisons des rapports de cristal pour nos applications .NET avec un backend de serveur sql, nous avons de nombreux clients ayant chacun leur propre serveur et donc nos rapports doivent avoir leurs connexions définies dynamiquement. Jusqu'à il y a une semaine cela a bien fonctionné. Cependant, il y a quelques jours, un client a signalé qu'il recevait une invite de connexion à la base de données pour un rapport (un seul rapport, le reste fonctionnait correctement). Nous étions tout à fait perplexes mais nous avons réussi à le reproduire sur un netbook qui n'avait pas de studio visuel ou de serveur sql installé. En fin de compte, le directeur de la publication a décidé de reproduire le rapport dans l'espoir que ce n'était qu'une bizarrerie dans ce rapport.Crystal Reports Failed Base de données Connexion

Malheureusement un nouveau le même problème rencontré aujourd'hui encore client, mais cette fois pour tous les rapports de cristal qu'ils avaient - et aussi qu'ils travaillaient sur le netbook, donc nous sommes vraiment perdu ici.

Voici une capture d'écran de ce que nos clients se présentent -

Screenshot http://img404.imageshack.us/img404/1375/loginf.png

et est ici le code que j'utilise pour définir les informations de connexion dans le rapport

   cI.ServerName = (string)builder["Data Source"]; 
       cI.DatabaseName = (string)builder["Initial Catalog"]; 
       cI.UserID = (string)builder["User ID"]; 
       cI.Password = (string)builder["Password"]; 

       foreach (IConnectionInfo info in cryRpt.DataSourceConnections) 
       { 
        info.SetConnection(cI.ServerName, cI.DatabaseName, cI.UserID, cI.Password); 
       } 

       foreach (ReportDocument sub in cryRpt.Subreports) 
       { 
        foreach (IConnectionInfo info in sub.DataSourceConnections) 
        { 
         info.SetConnection(cI.ServerName, cI.DatabaseName, cI.UserID, cI.Password); 
        } 
       } 

Comme toujours , toute aide très appréciée.

Répondre

2

solution trouvée, il est apparu le constructeur de connexion client utilisé pour mettre en place leur système n'a pas mis le nom d'instance dans. Au lieu de prêter à confusion l'application .net fonctionnait très bien avec elle comme ça. Cependant, avec ces rapports de cristal triés fonctionnent maintenant parfaitement.

Merci de votre contribution Craig.

+0

Je suis confronté à un problème similaire pouvez-vous dire ce que vous entendez par constructeur de connexion ici et dans votre code? Merci –

2

Peut-être que le problème est la façon dont vous définissez les informations d'authentification. Avez-vous envisagé d'utiliser la méthode ReportDocument.SetDatabaseLogon? Appelez-le une fois pour chaque connexion DB unique dans le rapport. Cela éliminera la nécessité d'énumérer tous les tableaux du rapport et, si je me souviens bien, la nécessité d'énumérer également les tableaux des sous-états.

+0

J'ai essayé votre suggestion mais je reçois toujours la même erreur avec le test - mais, maintenant il a un nom de base de données dans l'invite d'ouverture de session. Échoue quand même si j'essaie d'entrer le bon mot de passe. – Marlon

+0

Le champ dataase est-il défini? Si vous fournissez les informations d'identification appropriées lorsque le rapport vous y invite, le rapport fonctionne-t-il comme prévu? – craig

+0

Si vous codez les valeurs dans SetDatabaseLogon, comme reportDocument.SetDatabaseLogon ("compte", "mot de passe", "base de données", "serveur"), ça marche? Pour vous assurer que les informations d'ouverture de session du sous-rapport sont définies, ajoutez également ce bit à votre boucle de sous-rapport. Faites-moi savoir comment cela fonctionne et nous allons essayer le prochain test. – craig

0

La recherche d'une solution à un problème similaire m'a amené à cette question. Mon problème/solution était un peu différent mais je devine que d'autres avec mon problème finiront ici donc je posterai ma solution ici.

Si vos utilisateurs voient quelque chose comme ça en essayant de prévisualiser un rapport:

Crystal Reports Viewer screen shot

puis lors de la configuration les informations de connexion SQL Server pour le rapport, assurez-vous d'inclure le nom du service . Ainsi, par exemple, assurez-vous de donner à Crystal "myserver \ myservice" au lieu de "myserver".

Mon programme est en mesure d'accéder aux données de SQL Server en utilisant juste « myserver », mais cristal doit être donné « myserver \ myservice ».