Sql 根据日期范围查找记录

Sql 根据日期范围查找记录,sql,vb.net,sqldataadapter,Sql,Vb.net,Sqldataadapter,我对SQL很陌生。基本上,我有一个名为“Date”列的数据库,我希望返回所有条目,使“Date”介于startDate和endDate Dim myStr As String = String.Format("Select * from {0} where [Date] between @date1 and @date2", databaseTableName) Dim ad As New SqlDataAdapter(myStr, sqlConn) ad.SelectCommand.Par

我对SQL很陌生。基本上,我有一个名为“Date”列的数据库,我希望返回所有条目,使“Date”介于
startDate
endDate

Dim myStr As String = String.Format("Select * from {0} where [Date] between @date1 and @date2", databaseTableName)

Dim ad As New SqlDataAdapter(myStr, sqlConn)

ad.SelectCommand.Parameters.AddWithValue("@date1", frm.StartDate.Value.ToString("dd/MM/yyyy"))
ad.SelectCommand.Parameters.AddWithValue("@date2", frm.EndDate.Value.ToString("dd/MM/yyyy"))
其中,
frm
是一个Windows窗体日期时间选择器


不确定哪里出错,但查询根本不返回任何内容。

如果设置“dd/MM/yyyy”,SQL将返回错误“将varchar数据类型转换为DateTime数据类型导致值超出范围”。我认为您应该按以下方式设置格式

ad.SelectCommand.Parameters.AddWithValue("@date1", frm.StartDate.Value.ToString("yyyy/MM/dd"))
ad.SelectCommand.Parameters.AddWithValue("@date2", frm.EndDate.Value.ToString("yyyy/MM/dd"))
Dim myStr As String=String.Format(“从{0}中选择*,其中[Date]>=@date1和<@date2”,databaseTableName)
Dim ad作为新的SqlDataAdapter(myStr、sqlConn)
ad.SelectCommand.Parameters.Add(“@date1”SqlDbType.DateTime).Value=frm.StartDate.Value.Date
Add(“@date2”,SqlDbType.DateTime).Value=frm.EndDate.Value.Date.AddDays(1)

您应该在查询中传递日期,然后调用
ToString
。不要将二进制
日期
值转换为
字符串
。如果您真正想做的是将时间归零,那么这就是您要做的,即使用
frm.StartDate.Value.Date
。如果您使用字符串为查询设置日期值,那么您仍然做得不对。@JoelCoehoorn:为什么不能使用字符串设置日期值,我的朋友?举个例子:从Person中选择前10名,ModifiedDate。Person在'2009/01/10'和'2009/01/20'之间修改了Date有几个原因。其中一个原因是服务器可能实际具有与您期望的不同的日期格式。这一切都很有趣,除非你在德国找到了客户,或者有人为Azure实例选择了错误的地区。另一个原因是。好的,我知道了。你的解决方案很好。谢谢:)
Dim myStr As String = String.Format("SELECT * FROM {0} WHERE [Date] >= @date1 AND < @date2", databaseTableName)

Dim ad As New SqlDataAdapter(myStr, sqlConn)

ad.SelectCommand.Parameters.Add("@date1" SqlDbType.DateTime).Value = frm.StartDate.Value.Date
ad.SelectCommand.Parameters.Add("@date2", SqlDbType.DateTime).Value = frm.EndDate.Value.Date.AddDays(1)