C#到sql - 日期格式

时间:2014-01-08 08:50:56

标签: c# sql sql-server-2008-r2

表格 - 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
  • 'date'列的数据类型只是日期而非日期时间
DAL中的

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.所以我确定它的差异。日期格式。

4 个答案:

答案 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)内调用您的程序dtFromdtTo作为字符串。例如 -

//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中检查查询的日期格式。有时,当日期格式不匹配时会出现问题,常见的错误是查询中的任何一个包含时间而另一个不包含时间。