2014-01-15 85 views
0

我已经写了下面的代码之间的检索数据:SQL查询两个日期

Dim date1 As Date 
Dim date2 As Date 

date1 = Convert.ToDateTime(DatePickerFromDate.Text) 
date2 = Convert.ToDateTime(DatePickerToDate.Text) 

Dim cnd As New OleDbCommand("SELECT * FROM Sales WHERE Invoice_Date BETWEEN " + date1 + " AND " + date2 + "", om) 
om.Open() 
Dim da As OleDbDataReader = cnd.ExecuteReader 
While da.Read() 
     ComboBox1.Items.Add(da(0)) 
End While 
da.Close() 
om.Close() 

我想那些从两个datepickers采取两个日期之间的检索数据。

我试过BETWEEN,也试过> = = <但是结果是空的,尽管数据库包含数据。请帮助我出错的地方

+1

这是为什么用MySQL和SQL Server标记的?你正在使用哪个数据库? –

回答

2

您的代码可能会产生错误。当进行这种类型的查询时,应在替换后存储查询字符串并将其打印出来。您似乎在日期周围缺少分隔符。所以这可能适用于您的具体情况。

New OleDbCommand("SELECT * FROM Sales WHERE Invoice_Date BETWEEN '" + date1 + "' AND '" + date2 + "'", om) 

但是,您需要注意日期的格式。应用程序层和数据库可能使用不同的格式。如果您直接替换查询字符串,则使用YYYY-MM-DD格式 - 它是ISO标准的日期格式并且通常可以理解。

更好的是学习如何参数化查询,以便实际上可以将日期值作为日期参数传递。

+0

而不是得到一个错误,我看到发生的事情是像2014年1月15日这样的日期被评估为1除以15除以2014,结果为零。然后零被愉快地视为日期'1/1/1900'(至少对'datetime') –

+0

@ Gordon Linoff:我使用了MM/DD/YYYY格式。 Invoice_Date是数据类型日期,当我传递带分隔符的查询它显示错误“标准表达式中的数据类型不匹配” – Omkar

+0

@John Gibb:雅,它不显示任何错误。可能是你说的问题。所以你有什么解决方案的问题,我的意思是我应该做什么修改查询 – Omkar

0

如果您使用的MS Access,这应该是语法......

SELECT * FROM Sales WHERE Invoice_Date>=#" + date1 + "# and Invoice_Date<=#" + date2 + "#" 

如果您使用MS SQL服务器或MySQL,那么做这样的事情......

SELECT * FROM Sales WHERE Invoice_Date>='" + date1 + "' and Invoice_Date<='" + date2 + "'"