如何使用带有文本框值的选择查询作为比较数据库日期列



我的.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();

这是我在网上到处得到的查询,但我不想指定固定日期......我想允许用户选择文本,并根据该日期选择查询应该可以工作

请帮我解决问题,因为我是新来的。

如果我再次问了其他人之前问过的相同问题,请原谅我

我建议使用参数化查询,其中包含日期范围查询的包含开始日期和排除结束日期。最好避免在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

最新更新