【问题标题】:How to search by Start date如何按开始日期搜索
【发布时间】:2015-07-13 02:47:52
【问题描述】:

我想允许用户按开始日期进行搜索。我遇到了这个,但我不知道如何修改它,以便如果用户输入 7,它将检索所有 7 月开始日期数据或日期 7 的任何月份。

示例:用户输入 7 并搜索,输出将是:7/2/2015 或 2/7/2015。

protected void btnSearch_Click(object sender, EventArgs e)
{
    string constr = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand("SELECT OrderID, OrderDate, ShipName, ShipCity FROM Orders WHERE OrderDate BETWEEN @From AND @To", con))
        {
            using (SqlDataAdapter da = new SqlDataAdapter(cmd))
            {
                cmd.Parameters.AddWithValue("@From", Convert.ToDateTime(this.txtFrom.Text, new CultureInfo("en-GB")));
                cmd.Parameters.AddWithValue("@To", Convert.ToDateTime(this.txtTo.Text, new CultureInfo("en-GB")));
                DataSet ds = new DataSet();
                da.Fill(ds);
                GridView1.DataSource = ds;
                GridView1.DataBind();
            }
        }
    }
}

【问题讨论】:

  • DateTime startDate = new DateTime(2015, 7, 1)。按国家/地区文化(月-日与日-月)输入日期时间并不简单,因为您需要将国家/地区添加到代码中。而是让用户输入通用时间,即 yyyy-mm-dd。
  • @jdweng 对不起,我不明白。我想进行搜索,然后数据将检索并绑定到 gridview 。如何更改 sql 命令?
  • 您的意思是,如果用户输入 7,那么您的应用程序应该检索 7 月份的所有记录?
  • 您的订单日期字段类型是什么?是 varchar 还是 datetime ?
  • 你不需要改变sql命令,只要你输入参数的方式。现在,您正在使用 Convert.ToDateTime() 方法从字符串中获取 DataTime 对象。我建议使用带有数字的 DataTime 构造函数。

标签: c# asp.net date search


【解决方案1】:

您的问题不是很清楚,所以我想您只需要那些包含日期等于用户给出的值或月份等于用户给出的值的订单日期。如果我的假设是正确的,您可以尝试以下方法:

for (var intCount = 0; intCount < ds.Tables[0].Rows.Count; intCount++)
{
    var dateTime = Convert.ToDateTime(ds.Tables[0].Rows[intCount]["OrderDate"]);
    if (!dateTime.Day.ToString().Equals("7") && !dateTime.Month.ToString().Equals("7")) //Replace 7 with user input
    {
        ds.Tables[0].Rows[intCount].Delete();
    }
}
ds.AcceptChanges();

然后用 ds 填充你的网格。

但我还是有点好奇为什么您不在数据库端本身执行此操作。因为通过网络将所有数据带到代码中,然后对其进行过滤操作会降低您的应用程序的速度。

【讨论】:

    【解决方案2】:

    对我来说看起来像是一个 SQL 问题。您可能想尝试DATEPART SQL 命令。如果用户在txtFrom 中输入一个数字,那么您不会将其转换为日期进行比较。您可以将SqlCommand 设置为:

    "SELECT OrderID, OrderDate, ShipName, ShipCity 
       FROM Orders 
      WHERE DATEPART(month, OrderDate) BETWEEN @From AND @To
         OR DATEPART(day, OrderDate) BETWEEN @From AND @To "
    

    如果他们没有在txtTo 中输入值,那么只是开始日期,你可以这样做

    var from = txtFrom.Text;
    var to = txtTo.Text;
    if (string.IsNullOrEmpty(to))
    {
        to = from;
    }
    

    如果他们在“发件人”字段中输入 7,那将捕获月份为 7 或一天为 7 的任何内容。

    【讨论】:

      猜你喜欢
      • 2023-01-05
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 2013-10-02
      • 1970-01-01
      • 2019-01-13
      相关资源
      最近更新 更多