用户输入日期和时间作为 RDLC 报告中的 SQL 查询参数

问题描述 投票:0回答:0

我正在尝试构建一个从 SQL 数据库数据生成 RDLC 报告的 ASP NET 网站,但是在尝试通过两个文本框使用用户输入时,它只是在报告中没有显示任何内容,有人能告诉我为什么吗?

代码如下:

   protected void ShowReport()
   {
        DataTable dtOrders = GetOrdersByDates(DateTime.Parse(txtStartDate.Text),
        DateTime.Parse(txtEndDate.Text));
        RV1.Reset();
        RV1.LocalReport.ReportPath = Server.MapPath("~/reports/Report1.rdlc");
        ReportDataSource ds = new ReportDataSource("DataSet1", dtOrders);
        RV1.LocalReport.DataSources.Add(ds);
    }

    private DataTable GetOrdersByDates(DateTime from, DateTime to)
    {
        DataTable dt = new DataTable();
        String ConnectionString = @"Data Source=(local)\sqlexpress;initial Catalog=Operations;integrated Security=true;";
        using (SqlConnection cn = new SqlConnection(ConnectionString))
        {
        string query = @"SELECT Date AS Datet, nUser AS cvUser, NameUser AS User, COUNT(nTicket) AS notravels, CASE WHEN flagout = 0 THEN 'NO' ELSE 'YES' END AS FlaggedOut, '"+ from +"' AS FI, '" + to + "' AS FF FROM Operations WHERE Date BETWEEN '"+ from + "' AND '"+to+"' GROUP BY Date, nUser, NameUser, Flagout ORDER BY cvUser";
            SqlCommand cmd = new SqlCommand(query, cn);
            cn.Open();
            SqlDataReader reader = cmd.ExecuteReader();
            if (reader.HasRows) {
                dt.Load(reader);
            }
        }
        return dt;
    }

我已经在 SQL Management Studio 上完成了存储过程,并测试了使用此代码手动将查询设置为存储过程,并且它以这种方式工作

 protected void Users_Click(object sender, EventArgs e)
 {
    String ConnectionString = @"Data Source=(local)\sqlexpress;initial Catalog=Operations;integrated Security=true;";
    SqlConnection conn = new SqlConnection(ConnectionString);
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = conn;

    string query = @"SELECT CONVERT(datetime, MAX(Date)) AS Datet, nUser AS cvUser, NameUser AS User, COUNT(nTicket) AS notravels, CASE WHEN flagout = 0 THEN 'NO' ELSE 'YES' END AS FlaggedOut, CONVERT (datetime, '2022/12/09 6:0:00.000') AS FI, CONVERT(datetime, '2022/12/10 6:0:00.000') AS FF FROM Operations WHERE (CONVERT(datetime, Date) BETWEEN CONVERT(datetime, '2022/12/09 6:0:00.000') AND CONVERT (datetime, '2022/12/10 5:59:59.999')) GROUP BY Date, nUser, NameUser, Flagout ORDER BY cvUser";


    cmd.CommandText = "PR_CantUsers";
    cmd.CommandType = System.Data.CommandType.StoredProcedure;
    conn.Open();
    SqlDataReader dr = cmd.ExecuteReader();
    DataTable dt = new DataTable();
    dt.Load(dr);
    conn.Close();

    RV1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", dt));
    RV1.LocalReport.ReportPath = Server.MapPath("~/reports/Report1.rdlc");
    RV1.LocalReport.EnableHyperlinks = true;
}
c# asp.net sql-server rdlc sql-server-2008r2-express
© www.soinside.com 2019 - 2024. All rights reserved.