0
string queryStr = "SELECT * from Task_Report_Table where convert(varchar, date, 105) between '" + txtStartDate.Text.ToString() + "' and '" + txtEndDate.Text.ToString() + "'  ";

这是我用于从数据库中检索值的查询。

在数据库表 Task_Report_Table 中有列日期、名称、任务和小时。这里的日期是日期时间数据类型,所以在查询中转换为字符串和我匹配 th

我有一个带有开始日期和结束日期的 UI。通过在 UI 中给出日期。上面提到的查询必须显示记录。

如果 Iam Giving 开始日期 07-07-2012 和结束日期为 12-07-2012。它显示的值介于 07-07-2012 和 12-07-2012 值之间。但问题是它显示下个月和上个月月记录和下一年和上一年的记录也如果记录存在于数据库中。

问题是它仅验证日期。而不是月份和年份。我需要在 UI 中验证 iam Giving 的日、月、年。

4

3 回答 3

3

你不想写这样的 SQL,不要将字符串连接在一起,用这种代码破解(使用 SQL 注入)一个网站是如此容易。

试试这个:

SELECT * from Task_Report_Table where date between @startdate and @enddate

然后添加你正在使用SqlParameter的startdate 和 enddate ,如下所示:SqlCommand

SqlCommand command = new SqlCommand(yourSQL, connection);
command.Parameters.Add(new SqlParameter("startdate", DateTime.Parse(txtStartDate.Text)));
command.Parameters.Add(new SqlParameter("enddate", DateTime.Parse(txtEndDate.Text)));
于 2012-07-27T09:13:57.797 回答
1

问题是它仅验证日期。而不是月份和年份。我需要验证日、月、年

convert(varchar, date, 105)将为您提供一个看起来不像27-07-2012日期的字符串。因此,您的查询比较的是字符串而不是日期。

使用@SteenT建议的日期参数。

于 2012-07-27T09:20:06.530 回答
0

像这样尝试为文本框放置两个变量..

txtStatrdate.text=strdate;

txtEndDate.text=enddate  ; 

CONVERT(VARCHAR(10),date,101) BETWEEN CONVERT(DATETIME,strdate,101) AND
        CONVERT(DATETIME,enddate,101)
于 2012-07-27T09:22:51.613 回答