MSACCESS DateTIme SQL QUERY

时间:2016-09-22 18:18:33

标签: c# sql .net ms-access oledb

我来自印度(这可能与文化信息有关)。我正在使用MS-ACCESS 2010 32位作为后端在C#.Net 2010 Express中构建桌面应用程序。我正在使用OLEDB进行数据库连接。 我有一个名为dt的列作为日期/时间,其具有以下值:

20-09-2016 22:53:32
19-08-2016 22:54:24
20-09-2016 22:56:01
22-09-2016 22:56:27
22-09-2016 22:56:41

我需要按日期,按月和按年获取记录。 直到现在我无法完成日期部分,因此无法在月份和年份上工作。以下是我的代码:

b.com.CommandText = "SELECT * FROM srvtrans WHERE DateTime.Parse(dt)=@a ORDER BY sno DESC";
b.com.Parameters.Add("@a", dtp_srdmy.Value.ToShortDateString());
Show(dtp_srdmy.Value.ToShortDateString());
b.con.State == ConnectionState.Closed)
 con.Close();
mytemp = new DataTable();
da.Fill(mytemp);

我也尝试过以下变化:

WHERE CONVERT(VARCHAR(10),dt,111)=@a

WHERE CONVERT(VARCHAR(10),dt,101)=@a

WHERE dt LIKE '%@a%' 

WHERE DateTime.Parse(dt)=@a 

WHERE dt=DateValue(@a)

WHERE CAST(dt AS DATE)=@a

WHERE CONVERT(varchar, dt, 101)=@a

WHERE DATE(dt)=@a

WHERE dt=@a

但它们都不适合我。请回复在sql查询中应该进行哪些更新,以按日期,按月和按年获取记录。提前谢谢。

2 个答案:

答案 0 :(得分:3)

b.com.CommandText = "SELECT * FROM srvtrans WHERE dt = @a ORDER BY sno DESC";
b.com.Parameters.Add(new System.Data.OleDb.OleDbParameter("@a", OleDbType.DBDate) {Value = dtp_srdmy.Value });
con.Open();
  • 您希望传递参数值的类型的本机类型而不是字符串表示形式。我假设dtp_srdmy可能是一个用户控件({em>由@Gord Thompson在下面的评论中指出,可能是DateTimePicker )或其他类型Value是返回DateTime实例的属性。
  • 您希望直接比较,底层商店/提供商将为您处理比较,因此请勿尝试将您的值包装在刻度,引号或其他内容中,或尝试为商店引擎进行转换。
  • 您应该使用OleDbType枚举指定基础访问类型,我猜测它是DBDate但我可能是错的,如有必要请更正。
  • 执行任何命令之前打开连接。我假设您使用的是数据适配器,但没有看到它,请确保它与您的命令相关联。我省略了这部分代码,因为它与问题无关。

答案 1 :(得分:1)

以下代码应该可以正常工作:

  b.com.CommandText = "SELECT * FROM srvtrans WHERE DATEVALUE(dt)=DATEVALUE(@a) ORDER BY sno DESC";
  b.com.Parameters.Add("@a", dtp_srdmy.Value);

如果这有帮助就Upvote。