MSACCESS DateTIME SQL QUERY

问题描述:

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

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)[email protected] 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)[email protected] 

WHERE CONVERT(VARCHAR(10),dt,101)[email protected] 

WHERE dt LIKE '%@a%' 

WHERE DateTime.Parse(dt)[email protected] 

WHERE dt=DateValue(@a) 

WHERE CAST(dt AS DATE)[email protected] 

WHERE CONVERT(varchar, dt, 101)[email protected] 

WHERE DATE(dt)[email protected] 

WHERE [email protected] 

但没有人对我的作品。请回答在sql查询中应该进行哪些更新以按日期,月份和年份提取记录。提前致谢。

+0

另外看看行'b.con.State == ConnectionState.Closed',你检查是否关闭,然后再关闭它。你应该做的是在需要的时候创建一个新的OleDbConnection,并把它包装在一个使用块中。请参阅[最佳实践 - 执行Sql语句](http://*.com/documentation/.net/3589/ado-net/14261/best-practices-executing-sql-statements),其中有一些关于如何最佳结构的提示你的ado.net代码。 – Igor

下面的代码一定要工作:

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

给予好评,如果这有助于。

+0

是的,它的工作。完善。 – ITSagar

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是返回DateTime实例的属性。
  • 您想要直接比较,底层商店/提供商会为您处理比较,因此不要试图将您的值包装在蜱,报价或其他内容中,或尝试为商店引擎进行转换。
  • 你应该使用枚举OleDbType指定底层访问类型,我猜它是DBDate但我可能是错的,如有必要请更正它。
  • 在执行任何命令前打开连接。我假设你使用的是数据适配器,但没有看到它,请确保它与你的Command相关联。我忽略了这部分代码,因为它与问题无关。
+1

*“我假设'dtp_srdmy'是一个可为空的DateTime实例”* - “dtp_”前缀表明它是一个DateTimePicker对象,其[[Value](https://msdn.microsoft.com/en- us/library/system.windows.forms.datetimepicker.value(v = vs.110).aspx)属性是'DateTime'。不过,仍然是一个很好的答案。 +1 –

+1

@GordThompson - 啊哈,这样更有意义。谢谢! – Igor

+0

嗨。我很抱歉错误地写了con.close()。我已将其更改为b.con.Open();是的,dtp是一个c#。net datetimepicker控件。 Dataadapter存在并绑定在一个单独的类中。我用datareader和datadapter尝试了上面的建议,但仍然得到0行。 – ITSagar