5
votes

After spending a good 3 to 4 hours on google trying to find any solution to my problem I haven't had much luck.

Basically, we use crystal reports for our .NET applications with a sql server back end, we have many clients each with their own server and so our reports need to have their connections dynamically set. Up until a week ago this worked fine. However a few days ago a client reported they were getting a database login prompt for a report (only one report, the rest worked fine). We were quite stumped but we managed to reproduce it on a netbook which didn't have visual studio or sql server installed. In the end the dev decided to reproduce the report in the hope it was just an oddity in that particular report.

Unfortunately a new client today also experienced the same problem, but this time for every crystal report they had - and also they worked on the netbook, so we are really quite lost here.

Below is a screenshot of what our clients get presented with -

Screenshot

and here is the code that I use to set the connection information in the report

                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);
                    }
                }

As always, any help much appreciated.

3

3 Answers

2
votes

Perhaps the issue is the way that you set the authentication information. Have you considered using the ReportDocument.SetDatabaseLogon method? Call it once for each unique DB connection in the report. It will eliminate the need to enumerate all of the tables in the report and, as I recall, the need to enumerate the subreports' tables as well.

2
votes

Solution found, it turned out the connection builder that client used to set up their system did not put the instance name in. Rather confusingly the .net app worked fine with it like that. However, with that sorted crystal reports now work flawlessly.

Thank you for your input Craig.

0
votes

Searching for a solution to a similar problem brought me to this question. My problem/solution was a little different but I'm guessing others with my problem will end up here so I'll post my solution here.

If your users are seeing something like this when trying to preview a report:

Crystal Reports Viewer screen shot

then when setting the SQL Server login info for the report, make sure you include the service name. So, for example, make sure you're giving Crystal "myserver\myservice" instead of just "myserver".

My program is able to access data from SQL Server using just "myserver", but Crystal needs to be given "myserver\myservice".