MSACCESS DateTIme SQL 查询
MSACCESS DateTIme SQL QUERY
我来自印度(这可能与这里的文化信息有关)。我正在使用 MS-ACCESS 2010 32 位作为后端在 C#.Net 2010 Express 中构建桌面应用程序。我正在使用 OLEDB 进行数据库连接。
我有一个名为 dt 的列 Date/Time,它具有以下值:
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
但其中 none 适合我。请回复 sql 查询中应该进行哪些更新以按日期、按月和按年获取记录。提前致谢。
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
可能是用户控件( 正如 @Gord Thompson
在下面的评论中指出的可能是 DateTimePicker)或其他类型 Value
是一个 属性,returns 一个 DateTime
实例。
- 您想直接比较,底层 store/provider 会为您处理比较,因此不要尝试将您的值包含在刻度、引号或其他内容中,也不要尝试为商店引擎进行转换.
- 您应该使用
OleDbType
枚举指定底层访问类型,我猜是 DBDate
但我可能错了,如有必要请更正。
- 在执行任何命令之前打开您的连接。我假设您正在使用数据适配器但没有看到它,请确保它与您的命令相关联。我省略了这部分代码,因为它与问题无关。
下面的代码应该可以正常工作:
b.com.CommandText = "SELECT * FROM srvtrans WHERE DATEVALUE(dt)=DATEVALUE(@a) ORDER BY sno DESC";
b.com.Parameters.Add("@a", dtp_srdmy.Value);
如果有帮助请点赞。
我来自印度(这可能与这里的文化信息有关)。我正在使用 MS-ACCESS 2010 32 位作为后端在 C#.Net 2010 Express 中构建桌面应用程序。我正在使用 OLEDB 进行数据库连接。 我有一个名为 dt 的列 Date/Time,它具有以下值:
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
但其中 none 适合我。请回复 sql 查询中应该进行哪些更新以按日期、按月和按年获取记录。提前致谢。
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
可能是用户控件( 正如@Gord Thompson
在下面的评论中指出的可能是 DateTimePicker)或其他类型Value
是一个 属性,returns 一个DateTime
实例。 - 您想直接比较,底层 store/provider 会为您处理比较,因此不要尝试将您的值包含在刻度、引号或其他内容中,也不要尝试为商店引擎进行转换.
- 您应该使用
OleDbType
枚举指定底层访问类型,我猜是DBDate
但我可能错了,如有必要请更正。 - 在执行任何命令之前打开您的连接。我假设您正在使用数据适配器但没有看到它,请确保它与您的命令相关联。我省略了这部分代码,因为它与问题无关。
下面的代码应该可以正常工作:
b.com.CommandText = "SELECT * FROM srvtrans WHERE DATEVALUE(dt)=DATEVALUE(@a) ORDER BY sno DESC";
b.com.Parameters.Add("@a", dtp_srdmy.Value);
如果有帮助请点赞。