如何按开始日期搜索

时间:2015-07-13 02:47:52

标签: c# asp.net date search

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

示例:用户输入7并搜索,输出将为:2015年7月2日或2015年2月7日。

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();
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

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

x.map(_ * theta1)

然后使用ds。

填充网格

但是我再次对你为什么不在数据库本身做这个操作感到好奇。因为通过网络将所有数据传递给代码,然后对其进行过滤操作会降低应用程序的速度。

答案 1 :(得分:0)

对我来说看起来像是一个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;
}

如果他们在From字段中输入7,那么将会捕获7个月或7天的任何内容。