Reputation: 5087
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
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
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