【问题标题】:Display dates between two dates in asp.net在asp.net中显示两个日期之间的日期
【发布时间】:2016-03-21 06:05:43
【问题描述】:

我的 aspx 中有两个日历,我想在这些日历的选定日期之间显示记录。我的“TeklifTarih”数据库属性是日期类型属性。 这是我的aspx:

<asp:Calendar ID="Calendar1" runat="server"></asp:Calendar><br />
<asp:Calendar ID="Calendar2" runat="server"></asp:Calendar><br/>
<asp:Button ID="btnClendar" runat="server" Text="İstatistikleri Filtrele" OnClick="btnClendar_Click"/>

还有我的 onclick 方法:

protected void btnClendar_Click(object sender, EventArgs e)
    {
        string baslangicTarihi = Calendar1.SelectedDate.ToString();
        string bitisTarihi = Calendar2.SelectedDate.ToString();
        EntityDataSourcePersonel.CommandText =
            "SELECT COUNT(TeklifTable.TeklifHazirlayan) AS Basari, EmployeeTable.Name, EmployeeTable.Surname, SUM(TeklifTable.TeklifTutar) AS ToplamSatis FROM EmployeeTable JOIN TeklifTable ON TeklifTable.TeklifHazirlayan = EmployeeTable.EmployeeId WHERE TeklifTable.TeklifTarih >= " + baslangicTarihi + " AND TeklifTable.TeklifTarih <= " + bitisTarihi + " GROUP BY EmployeeTable.Name,EmployeeTable.Surname";
    }

我需要使用此命令文本显示数据,当我删除查询的 where 命令时它可以工作,但我需要使用这两个日期进行过滤。

【问题讨论】:

  • 检查日期时间的输出格式。如果数据库需要不同的格式,则查询失败。例如,您的字符串格式为“dd.MM.yyyy”,但数据库日期格式为“MM/dd/yyyy”。
  • 您使用的是哪个 dbms?
  • 感谢您的回答。来自程序的日期格式类似于“01.12.2015 00:00:00”,而来自 db 的日期格式类似于“2015-12-15”。如何将 '01.12.2015 00:00:00' 转换为 '01-12-2015' ? @萨米
  • 感谢您的回复。我正在使用 MSSQL @jarlh

标签: c# sql asp.net sql-server date


【解决方案1】:

您在创建 sql 语句时错过了单引号 ('),您的查询应该如下所示:-

EntityDataSourcePersonel.CommandText =
"SELECT COUNT(TeklifTable.TeklifHazirlayan) AS Basari, EmployeeTable.Name, 
 EmployeeTable.Surname, SUM(TeklifTable.TeklifTutar) AS ToplamSatis FROM 
 EmployeeTable JOIN TeklifTable ON TeklifTable.TeklifHazirlayan = EmployeeTable.EmployeeId 
 WHERE TeklifTable.TeklifTarih >= '" + baslangicTarihi + "' 
 AND TeklifTable.TeklifTarih <= '" + bitisTarihi + "' 
 GROUP BY EmployeeTable.Name,EmployeeTable.Surname";

【讨论】:

    【解决方案2】:

    结合其他答案指出您缺少引号和日期时间格式,以下应该可以工作:(虽然未经测试)

    EntityDataSourcePersonel.CommandText =
    "SELECT COUNT(TeklifTable.TeklifHazirlayan) AS Basari, EmployeeTable.Name, 
    EmployeeTable.Surname, SUM(TeklifTable.TeklifTutar) AS ToplamSatis FROM 
    EmployeeTable JOIN TeklifTable ON TeklifTable.TeklifHazirlayan = EmployeeTable.EmployeeId 
    WHERE TeklifTable.TeklifTarih >= '" + baslangicTarihi.ToString("yyyy-MM-dd") + "' 
    AND TeklifTable.TeklifTarih <= '" + bitisTarihi.ToString("yyyy-MM-dd") + "' 
    GROUP BY EmployeeTable.Name,EmployeeTable.Surname";
    

    还要考虑 Tim 关于参数化查询的观点,您应该尽可能使用它们。

    【讨论】:

      【解决方案3】:

      我必须承认我不熟悉EntityDataSource 控件。但根据what i've read,您也可以使用参数化查询。就这样吧:

      String sql = @"SELECT Count(TeklifTable.TeklifHazirlayan) AS Basari, 
             EmployeeTable.NAME, 
             EmployeeTable.Surname, 
             Sum(TeklifTable.TeklifTutar)        AS ToplamSatis 
      FROM   EmployeeTable 
             JOIN TeklifTable 
               ON TeklifTable.TeklifHazirlayan = EmployeeTable.EmployeeId 
      GROUP  BY EmployeeTable.NAME, 
                EmployeeTable.Surname";
      EntityDataSourcePersonel.CommandText = sql;
      String whereClause = @"TeklifTable.TeklifTarih >= @baslangicTarihi 
                         AND TeklifTable.TeklifTarih <= @bitisTarihi";
      EntityDataSourcePersonel.Where = whereClause;
      EntityDataSourcePersonel.WhereParameters.Add(new Parameter("baslangicTarihi", TypeCode.DateTime,  Calendar1.SelectedDate));
      EntityDataSourcePersonel.WhereParameters.Add(new Parameter("bitisTarihi", TypeCode.DateTime,  Calendar2.SelectedDate));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-02
        相关资源
        最近更新 更多