C# selection sql语句未响应日期值

C# selection sql语句未响应日期值,c#,sql,ms-access,C#,Sql,Ms Access,我试图从数据库中选择日期等于会话中日期的项目。它说在[0][2]位置没有行,但实际上那里有一行。这是我的代码: DateTime b = Convert.ToDateTime(Session["Dat"]); int D = b.Day; int M = b.Month; int Y = b.Year; string dat = M + "/" + D + "/" + Y ; DataTable m; m = DAL.SelectFromTable( "SELECT * FROM [To

我试图从数据库中选择日期等于会话中日期的项目。它说在[0][2]位置没有行,但实际上那里有一行。这是我的代码:

DateTime b = Convert.ToDateTime(Session["Dat"]);
int D = b.Day;
int M = b.Month;
int Y = b.Year;
string dat = M + "/" + D + "/" + Y ;

DataTable m;
m = DAL.SelectFromTable(
   "SELECT * FROM [ToDoList] where [UserID]='" + k + "' and  [D]="+ dat);
if (m.Rows.Count > 0)
{
    Response.Write("</br></br></br><center>" + m.Rows[0][2].ToString() + "</center>");
}

正如Crowcoder所说,您使用的是哪种数据库?这将有助于确定应该如何将日期发送到查询中

如果基础字段是datetime,则可能需要显式地从值中修剪时间部分,以便与日期进行比较。在Sql server中:

...where CAST([D] as DATE) = [The date passed in from from C#]
否则,你可能会在某个随意的时间将今天与午夜的今天进行比较,这不会给你想要的


另外,请考虑对Sql查询进行参数化-像这样建立字符串文字是一种不好的做法,会使您的应用程序容易受到Sql注入攻击。

正如Crowcoder所说,您使用的是哪个数据库?这将有助于确定应该如何将日期发送到查询中

如果基础字段是datetime,则可能需要显式地从值中修剪时间部分,以便与日期进行比较。在Sql server中:

...where CAST([D] as DATE) = [The date passed in from from C#]
否则,你可能会在某个随意的时间将今天与午夜的今天进行比较,这不会给你想要的


另外,请考虑对Sql查询进行参数化-像这样建立字符串文字是一种不好的做法,会使您的应用程序容易受到Sql注入攻击。

Access要求日期周围有

假设DAL不是由您编写的,并且您没有正确、安全地查询数据库的选项,那么您必须执行以下操作:

...and [D] = #" + dat + "#"
然而,@ThisExtend有一个很好的观点,这可能不会返回任何结果,因为您必须使日期的时间部分与数据库中的数据完全相同,并且您只使用月、日和年来构建日期

您还可以通过选择一个范围来绕过时间部分:

... and [D] BETWEEN #" + dat + "# AND #" + // one day greater than your date at midnight + "#"
但是如果你这样做,你必须小心不要创造一个不可能的日期,例如5月32日


一定要感谢您的老师继续培训学生不安全地编写代码,将SQL注入漏洞放在顶部,放在它所属的位置。

Access要求日期必须用空格括起来

假设DAL不是由您编写的,并且您没有正确、安全地查询数据库的选项,那么您必须执行以下操作:

...and [D] = #" + dat + "#"
然而,@ThisExtend有一个很好的观点,这可能不会返回任何结果,因为您必须使日期的时间部分与数据库中的数据完全相同,并且您只使用月、日和年来构建日期

您还可以通过选择一个范围来绕过时间部分:

... and [D] BETWEEN #" + dat + "# AND #" + // one day greater than your date at midnight + "#"
但是如果你这样做,你必须小心不要创造一个不可能的日期,例如5月32日


一定要感谢您的老师继续培训学生不安全地编写代码,让SQL注入漏洞保持在最顶端,就在它所属的位置。

没有理由重新发明轮子,只需使用方法来尝试:


没有理由重新发明轮子,只需使用以下方法:



您实际使用的是哪个数据库?在SQL字符串中,您是否需要在日期周围添加单引号,就像您对用户ID所做的那样?我使用的是Access您实际使用的是哪个数据库?在SQL字符串中,你是否需要像对用户ID那样在日期周围添加单引号?我在高中时使用accessIm,我完全按照老师告诉我的方式进行操作,但我不知道该怎么做?在数据库的[ToDoList]表中查找[D]列-是日期字段还是日期时间字段?它是平均时间中的日期时间字段,OP表示这是MS访问,标签已更新。CAST语句未被MS Access识别。我实际上在高中,我完全按照老师告诉我的方式去做,但我不知道该怎么办?在数据库中的[ToDoList]表中查找[D]列-是日期字段还是日期时间字段?同时是日期时间字段,OP表示这是MS访问,标签已更新。MS Access无法识别CAST语句。请原谅!:阿门