我的.aspx标记:
<ajaxToolkit:CalendarExtender ID="CalendarExtender1" PopupButtonID="imgpopup" runat="server" TargetControlID="TextBox11" Format="MM-yyyy" DefaultView="Months" />
<asp:TextBox ID="TextBox11" runat="server">
</asp:TextBox>
.aspx.cs代码后面:
string text = "Textbox11.Text";
string s = "SELECT * FROM Stock WHERE MONTH(Date) = 09 AND YEAR(Date) = 2018";
SqlCommand cmd = new SqlCommand(s, conn);
SqlDataAdapter dr = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
dr.Fill(dt);
GridView1.DataSource = dt;
GridView1.DataBind();
这是我在网上到处都可以查询的查询,但是我不想指定固定日期。...我想允许用户选择文本,并根据该日期选择查询应该可以工作
因为是我的新手,请帮助我解决问题。
请原谅我是否再次问过别人以前问过的同样问题
答案 0 :(得分:0)
我建议对日期范围查询使用带开始日期和结束日期的参数化查询。最好避免将函数应用于WHERE
子句中的SQL Server列,因为这样会导致索引(如果有)无法有效使用。例如:
var date = DateTime.Now;
if(!DateTime.TryParse(Textbox11.Text, out date))
{
//invalid date handing
return;
}
var startDate = new DateTime(date.Year, date.Month, 1);
var endDate = startDate.AddMonths(1);
string s = "SELECT * FROM Stock WHERE Date >= @StartDate AND Date < @EndDate;";
SqlCommand cmd = new SqlCommand(s, conn);
SqlDataAdapter dr = new SqlDataAdapter(cmd);
cmd.Parameters.Add("@StartDate", SqlDbType.DateTime).Value = startDate;
cmd.Parameters.Add("@EndDate", SqlDbType.DateTime).Value = endDate;
DataTable dt = new DataTable();
dr.Fill(dt);
另外,考虑指定仅包含所需列而不是SELECT *
的显式列列表,因为这将减少不必要的数据传输并为SQL Server提供更多查询优化选项。
请注意,自由格式的日期解析是不明确的。最好将用户输入限制为特定的日期格式,或者使用为您执行此操作的日期选择器控件,从而允许在服务器端使用TryParseExact
。