C# MSACCESS DateTIme SQL查询
我来自印度(这可能与这里的文化信息有关)。我正在用C#.Net 2010 Express构建一个桌面应用程序,以MS-ACCESS 2010 32位作为后端。我正在使用OLEDB进行db连接。 我有一个名为dt的列作为日期/时间,它有以下值: 20-09-2016 22:53:32C# MSACCESS DateTIme SQL查询,c#,sql,.net,ms-access,oledb,C#,Sql,.net,Ms Access,Oledb,我来自印度(这可能与这里的文化信息有关)。我正在用C#.Net 2010 Express构建一个桌面应用程序,以MS-ACCESS 2010 32位作为后端。我正在使用OLEDB进行db连接。 我有一个名为dt的列作为日期/时间,它有以下值: 20-09-2016 22:53:32 2016年8月19日22:54:24 20-09-2016 22:56:01 22-09-2016 22:56:27 22-09-2016 22:56:41 我需要按日期、月份和年份取记录。 到目前为止,我无法完成日
2016年8月19日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查询中应该进行哪些更新,以便按日期、月份和年份获取记录。提前谢谢
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\u srdmy
所指出的,可能是一个日期时间选择器)或其他类型,@Gord Thompson
是一个返回Value
实例的属性DateTime
- 如果要直接比较,则基础存储/提供程序将为您处理比较,因此不要尝试用记号、引号或其他方式包装您的值,也不要尝试对存储引擎进行转换
- 您应该使用
枚举指定底层访问类型,我猜它是OleDbType
,但我可能错了,请在必要时更正它DBDate
- 在执行任何命令之前打开连接。我假设您正在使用数据适配器,但没有看到它,请确保它与您的命令相关联。我省略了代码的这一部分,因为它与问题无关
- 您希望传入参数值的本机类型,而不是类型的字符串表示形式。我假设
可能是一个用户控件(正如下面评论中的dtp\u srdmy
所指出的,可能是一个日期时间选择器)或其他类型,@Gord Thompson
是一个返回Value
实例的属性DateTime
- 如果要直接比较,则基础存储/提供程序将为您处理比较,因此不要尝试用记号、引号或其他方式包装您的值,也不要尝试对存储引擎进行转换
- 您应该使用
枚举指定底层访问类型,我猜它是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);
如果这有帮助,请向上投票。以下代码肯定可以工作:
b.com.CommandText = "SELECT * FROM srvtrans WHERE DATEVALUE(dt)=DATEVALUE(@a) ORDER BY sno DESC";
b.com.Parameters.Add("@a", dtp_srdmy.Value);
如果有帮助,请向上投票。此外,请查看行
b.con.State==ConnectionState.Closed
,检查是否已关闭,然后再次关闭。您应该做的是在需要时创建一个新的OLEDB连接,并将其包装在using块中。查看哪一行提供了有关如何最佳构造ado.net代码的一些提示。此外,请查看行b.con.State==ConnectionState.Closed
,检查是否已关闭,然后再次关闭。您应该做的是在需要时创建一个新的OLEDB连接,并将其包装在using块中。请参阅关于如何最佳构造ado.net代码的一些提示。“我假设dtp\u srdmy
是一个可为空的日期时间实例”-“dtp\u”前缀表示它是一个属性为DateTime
的DateTimePicker
对象。不过,这仍然是一个很好的答案+1@GordThompson-啊哈,这更有道理。谢谢你好很抱歉,我写错了con.close()。我把它改成了b.con.Open();是的,dtp是一个c#.net日期时间选择器控件。Dataadapter存在并绑定在单独的类中。我用datareader和DataAdapter尝试了上述建议,但仍然得到了0行。“我假设dtp\u srdmy
是一个可为空的DateTime实例”-“dtp\u”前缀表示它是一个DateTimePicker
对象,其属性是DateTime
。不过,这仍然是一个很好的答案+1@GordThompson-啊哈,这更有道理。谢谢你好很抱歉,我写错了con.close()。我把它改成了b.con.Open();是的,dtp是一个c#.net日期时间选择器控件。Dataadapter存在并绑定在单独的类中。我用datareader和datadapter尝试了上述建议,但仍然得到了0行。