integrated crystal report prompting for datasource

pagefigaro
pagefigaro used Ask the Experts™
on
I have a program that was created in Visual Studio 2005 and then upgraded to Visual Studio 2008. It is written in C#. The database is sql. MSDE instance is running on local PC. On the PC that the database is running on, the program will not run any of the integrated Crystal Reports. It wants me to type in the username and password for the datasource. The datasource that it is looking for is not correct. They worked fine when the reports were using Crystal Reports 10 and not the integrated Crystal builder that comes with VS 2008. I do know that the reports work though because I can display them on the PC that is not running the db. The program uses an ".ini" file to send the datasource and password parameters. Both PC's are XP Pro. Both have the same Crystal Reports Runtime component. Both have the same versions of .NET Framework installed. Any insight/help would be very appreciated!
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Mike McCrackenSenior Consultant
Most Valuable Expert 2011
Top Expert 2013

Commented:
What code is used to pass the datasource?

What is in the ini file?

mlmcc
I think you line about " The datasource that it is looking for is not correct" provides the key.
 Without knowing any more about your setup, it seems you either need to change the reports to use a datasource that really does exist on the pc with the database OR setup a datasource on the pc with the database that matches the expectations of the report.
If you can open the report on the pc with the db, you should be able to update the report to use the correct datasource.
 

Author

Commented:
This is the ini file:
[LOG]
LogON=YES
[DATA]
DATASOURCE=JENRUPP
MISDB=finney
[FACTOR]
MARGINFACTOR=.6
LOWESTFACTOR=.9
CONSIGNMENTFACTOR=.33
[TEMP]
TEMP=3526
[OTHER]
PREVIEW=OFF
X=10
Y=10
LINEWIDTH=110
LABELPRINTER=LABEL
RECEIPTPRINTER=RECEIPT
PARASTART=590
TOPRINTER=YES
TIMEOUT=1000
TIMERON=YES
[LABELFONT]
FONT=FRANCINEHMKBOLD
SIZE=11

case "GROSSPROFIT":
					try
					{
				
						GrossProfit1 custReport = new GrossProfit1();
						custReport.SetDatabaseLogon("sa","sa");
 
						
				
 
						ParameterFields myParams = new ParameterFields();  
						ParameterField myParam = new ParameterField();  
						ParameterDiscreteValue myDiscreteValue = new ParameterDiscreteValue();
						myParam.ParameterFieldName = "BeginTime";
						ShipDate frmShipDate = new ShipDate();
						frmShipDate.Text = "Enter Start Date";
						DialogResult result = frmShipDate.ShowDialog();
						
 
						DateTime queryDateBegin;
						queryDateBegin = Convert.ToDateTime( frmShipDate.Shipdate);
						frmShipDate.Dispose();
						myDiscreteValue.Value = queryDateBegin;
 
						myParam.CurrentValues.Add(myDiscreteValue);
 
						myParams.Add(myParam);
 
						ParameterField myParam1 = new ParameterField();  
						ParameterDiscreteValue myDiscreteValue1 = new ParameterDiscreteValue();
						myParam1.ParameterFieldName = "EndTime";
 
						DateTime queryDateBegin1 = today.AddDays(1);
 
						frmShipDate = new ShipDate();
						frmShipDate.Text = "Enter End Date";
						result = frmShipDate.ShowDialog();
						string strTest = frmShipDate.Shipdate;
 
						
						queryDateBegin1 = Convert.ToDateTime( frmShipDate.Shipdate + " 23:59:59");
 
						frmShipDate.Dispose();
 
						myDiscreteValue1.Value = queryDateBegin1;
 
						myParam1.CurrentValues.Add(myDiscreteValue1);
 
						myParams.Add(myParam1);
 
 
						crystalReportViewer1.ParameterFieldInfo = myParams;
 
 
						crystalReportViewer1.ReportSource = custReport;
						custReport.Refresh();
					
					}
					catch(Exception test)
					{
						MessageBox.Show(test.Message);
					}
					break;
					#endregioncase "GROSSPROFIT":
					try
					{
				
						GrossProfit1 custReport = new GrossProfit1();
						custReport.SetDatabaseLogon("sa","sa");
 
						
				
 
						ParameterFields myParams = new ParameterFields();  
						ParameterField myParam = new ParameterField();  
						ParameterDiscreteValue myDiscreteValue = new ParameterDiscreteValue();
						myParam.ParameterFieldName = "BeginTime";
						ShipDate frmShipDate = new ShipDate();
						frmShipDate.Text = "Enter Start Date";
						DialogResult result = frmShipDate.ShowDialog();
						
 
						DateTime queryDateBegin;
						queryDateBegin = Convert.ToDateTime( frmShipDate.Shipdate);
						frmShipDate.Dispose();
						myDiscreteValue.Value = queryDateBegin;
 
						myParam.CurrentValues.Add(myDiscreteValue);
 
						myParams.Add(myParam);
 
						ParameterField myParam1 = new ParameterField();  
						ParameterDiscreteValue myDiscreteValue1 = new ParameterDiscreteValue();
						myParam1.ParameterFieldName = "EndTime";
 
						DateTime queryDateBegin1 = today.AddDays(1);
 
						frmShipDate = new ShipDate();
						frmShipDate.Text = "Enter End Date";
						result = frmShipDate.ShowDialog();
						string strTest = frmShipDate.Shipdate;
 
						
						queryDateBegin1 = Convert.ToDateTime( frmShipDate.Shipdate + " 23:59:59");
 
						frmShipDate.Dispose();
 
						myDiscreteValue1.Value = queryDateBegin1;
 
						myParam1.CurrentValues.Add(myDiscreteValue1);
 
						myParams.Add(myParam1);
 
 
						crystalReportViewer1.ParameterFieldInfo = myParams;
 
 
						crystalReportViewer1.ReportSource = custReport;
						custReport.Refresh();
					
					}
					catch(Exception test)
					{
						MessageBox.Show(test.Message);
					}
					break;
					#endregion

Open in new window

Become a Certified Penetration Testing Engineer

This CPTE Certified Penetration Testing Engineer course covers everything you need to know about becoming a Certified Penetration Testing Engineer. Career Path: Professional roles include Ethical Hackers, Security Consultants, System Administrators, and Chief Security Officers.

Take a look here, page.  I was digging through my code snippets, but this was faster
http://www.experts-exchange.com/Database/Reporting_/Crystal_Reports/Q_23477937.html
The key pieces shown below

  ConnectionInfo connectionInfo = new ConnectionInfo(); //our connection details
 
            try
            {
 
                connectionInfo.DatabaseName = System.Configuration.ConfigurationManager.AppSettings["DataBaseName"].ToString(); // cms database change to production
                string username = Session["strUserCMSName"].ToString();//cms username 
                connectionInfo.UserID = username;
                connectionInfo.Type = ConnectionInfoType.CRQE; //SQL;//sql server 
 
                string password = Session["strUserPassword"].ToString();//cms password
                connectionInfo.Password = password;
                connectionInfo.ServerName = System.Configuration.ConfigurationManager.AppSettings["DataBaseServer"].ToString(); //changing to our production database server
            }
            catch (Exception ex) 
            {
                lblerror.Text = ex.ToString();
                return; 
            } 
 
 
 
  private void SetDBLogonForReport(ConnectionInfo connectionInfo, ReportDocument reportDocument)
        {
            //loop over each table in the reports and set the logon/connection info
            Tables tables = reportDocument.Database.Tables;
            foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
            {
                TableLogOnInfo tableLogonInfo = table.LogOnInfo;
                tableLogonInfo.ConnectionInfo = connectionInfo;
                table.ApplyLogOnInfo(tableLogonInfo);
                table.Location = "dbo." + table.Location;//this line is crutial for some sql configs - you may or not need it
            }
        }

Open in new window

Author

Commented:
Topdog: When I run the report from the program, it brings up a prompt that asks for credentials. It shows the datasource and database name but they are greyed out along with the username. On the other PC, this prompt does not come up, it just goes directly to the report. If the datasource and database name were not greyed out, I could change them and it would work. Problem is, it probably would happen the next time I ran the report. I cannot literally open the report on the PC with the database because it doesn't really exist. The report is compiled into the exe file. Hope that helps.
Mike McCrackenSenior Consultant
Most Valuable Expert 2011
Top Expert 2013

Commented:
You have to change the code to set the location of the database or make sure it is in the same place on all PCs.

The report saves the database location in the report and tries to use it.  THe report doesn't use the INI file to get the database though the program may.

mlmcc

Author

Commented:
mlmcc: the report(s) work fine on the other PC that doesn't house the db. the ini files are the same on each PC.

Author

Commented:
topdog: where would i put that code? when i call the report?
Mike McCrackenSenior Consultant
Most Valuable Expert 2011
Top Expert 2013

Commented:
What machine were the reports developed on?

mlmcc

Author

Commented:
they are developed on my work machine. They were orginally created using Crystal Reports 10. i had imported them into visual studio 2008. Since then, I have recreated every report using the integrated Crystal in VS 2008.
Exactly

Author

Commented:
topdog770: what do you mean by "exactly"
thanks for the help but i figured out the problem. i had to set up an odbc connection on the pc that holds the database. it didn't require it before the reports were converted to the new version of crystal.

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial