表格 - tblData(1月数据):
这就是我使用select * from tblData
ID Tag Date
1 OB 2014-07-01
2 OC 2014-07-01
3 AB 2014-07-01
尝试从C#实现相同目标,但这不起作用。
DateTime dtFrom = Convert.ToDateTime(txtFromDate.Text.Trim(),System.Globalization.
CultureInfo.GetCultureInfo("hi-IN").DateTimeFormat);
DateTime dtTo = Convert.ToDateTime(txtToDate.Text.Trim(),System.Globalization.
CultureInfo.GetCultureInfo("hi-IN").DateTimeFormat);
gridview1.DataSource = objDAL.GetData(dtFrom,dtTo);
gridview1.DataBind();
这是SQL Server 2008 R2存储过程
Alter Procedure GetData
(
@DateFrom Date, @DateTo Date
)
As
Begin
Select * from tblData
where date between @DateFrom and @DateTo
End
上述查询没有返回任何行,我相信这可能是由于日期格式造成的。怎么解决这个问题?不确定是否必须在代码或存储过程中更改它。
修改
08-01-2013
dtFrom
后面的代码变为 - 1/8/2013 12:00:00 AM
GetData
public DataTable GetData(DateTime dtfrom, DateTime dtto)
{
var qry = from p in MyDB.GetData(dtfrom,dtto)
select new
{
id = p.id,
tag = p.tag,
date = p.date
}
dt = qry.ToDataTable();
return dt;
}
问题不在于dal代码。它执行得很好。行数为0.所以我确定它的差异。日期格式。
答案 0 :(得分:1)
1)在SP中试试这个。
Select * from tblData
Where
( [date] >= @DateFrom and [date] <= @DateTo )
看看它是否有帮助。
2)更改SP以接受DateTime参数, 否则某人(DAL或以下)可能含蓄 将DateTime值从UI转换为Date值。
答案 1 :(得分:1)
使用可以使用 CONVERT 功能转换日期,如下所示..
Alter Procedure GetData
(
@DateFrom Date, @DateTo Date
)
As
Begin
set @DateFrom = CONVERT(DATE, @DateFrom, 101)
set @DateTo = CONVERT(DATE, @DateTo , 101)
Select * from tblData
where [date] between @DateFrom and @DateTo
End
更多日期对话格式使用 this link 。
答案 2 :(得分:1)
在MyDB.GetData(dtFrom,dtTo)
内调用您的程序dtFrom
和dtTo
作为字符串。例如 -
//I am assuming you are using SqlCommand To connect to DB
cmd.Parameters.AddWithValue("@DateFrom", dtFrom.ToString("yyyy-MM-dd"));
cmd.Parameters.AddWithValue("@DateTo", dtFrom.ToString("yyyy-MM-dd"));
OR,
cmd.Parameters.AddWithValue("@DateFrom", dtFrom.ToString("dd-MMM-yyyy"));
cmd.Parameters.AddWithValue("@DateTo", dtFrom.ToString("dd-MMM-yyyy"));
sql server可以读取此字符串值并将其正确转换为date
。
答案 3 :(得分:0)
在C#和SQL中检查查询的日期格式。有时,当日期格式不匹配时会出现问题,常见的错误是查询中的任何一个包含时间而另一个不包含时间。