abramlimpin
abramlimpin

Reputation: 5087

Crystal Report not refreshing data after using a different SQL statement

I have created two methods that allow to use advanced search to display the Logs table:

void GetLogs()
{
     DateTime start = GetFirstRecord();
     DateTime end = GetLastRecord();
     con.Open();
     SqlCommand cmd = new SqlCommand();
     cmd.Connection = con;
     cmd.CommandText = "SELECT Logs.LogID, Users.LastName, Users.FirstName, " +
         "Logs.LogType, Logs.Description, Logs.Timestamp FROM Logs INNER JOIN Users " +
         "ON Logs.UserID = Users.UserID";

     SqlDataAdapter da = new SqlDataAdapter(cmd);
     DataSet ds = new DataSet();
     da.Fill(ds, "Report");
     rptLogs report = new rptLogs();
     report.SetDatabaseLogon("username", "password", "(local)", "database");
     report.SetDataSource(ds);
     report.SetParameterValue("Start", start);
     report.SetParameterValue("End", end);
     crvLogs.ReportSource = report;
     crvLogs.Refresh();

     con.Close();
}

and

void GetLogsByTimestamp()
{
     con.Open();
     SqlCommand cmd = new SqlCommand();
     cmd.Connection = con;
     cmd.CommandText = "SELECT Logs.LogID, Users.LastName, Users.FirstName, " +
         "Logs.LogType, Logs.Description, Logs.Timestamp FROM Logs INNER JOIN Users " +
         "ON Logs.UserID = Users.UserID WHERE Logs.Timestamp BETWEEN @Start AND @End";
     cmd.Parameters.Add("@Start", SqlDbType.DateTime).Value = dtpStart.Value.Date;
     cmd.Parameters.Add("@End", SqlDbType.DateTime).Value = dtpEnd.Value.Date;
     SqlDataAdapter da = new SqlDataAdapter(cmd);
     DataSet ds = new DataSet();
     da.Fill(ds, "Report");
     rptLogs report = new rptLogs();
     report.SetDatabaseLogon("username", "password", "(local)", "database");
     report.SetDataSource(ds);
     report.SetParameterValue("Start", dtpStart.Value.Date);
     report.SetParameterValue("End", dtpEnd.Value.Date);
     crvLogs.ReportSource = report;
     crvLogs.Refresh();

     con.Close();
}

The first method loaded the Crystal Report properly inside the application. However, when I triggered the second method, only the parameter field values were being updated. The details of the report are still the same.

Am I missing something?

Upvotes: 1

Views: 1468

Answers (2)

dotjoe
dotjoe

Reputation: 26940

report.SetDatabaseLogon("username", "password", "(local)", "database");
report.SetDataSource(ds);

Does your report also have a separate database connection in addition to the dataset you are pushing into it?

Upvotes: 1

campagnolo_1
campagnolo_1

Reputation: 2750

     con.Open();
 SqlCommand cmd = new SqlCommand();
 cmd.Connection = con;
 cmd.CommandText = "SELECT Logs.LogID, Users.LastName, Users.FirstName, " +
     "Logs.LogType, Logs.Description, Logs.Timestamp FROM Logs INNER JOIN Users " +
     "ON Logs.UserID = Users.UserID WHERE Logs.Timestamp BETWEEN @Start AND @End";
 cmd.Parameters.Add("@Start", SqlDbType.DateTime);
 cmd.Parameters["@Start"].Value = dtpStart.Value.Date;
 cmd.Parameters.Add("@End", SqlDbType.DateTime);
 cmd.Parameters["@End"].Value = dtpEnd.Value.Date;
 SqlDataAdapter da = new SqlDataAdapter(cmd);
 DataSet ds = new DataSet();
 da.Fill(ds, "Report");
 rptLogs report = new rptLogs();
 report.SetDatabaseLogon("username", "password", "(local)", "database");
 report.SetDataSource(ds);
 report.SetParameterValue("Start", dtpStart.Value.Date);
 report.SetParameterValue("End", dtpEnd.Value.Date);
 crvLogs.ReportSource = report;
 crvLogs.Refresh();

 con.Close();

The question still remains whether the second method actually gets triggered. If so, the error is in the SQL statement, if not, then the trigger is wrong.

Upvotes: 0

Related Questions