在SelectCommand中将C#DateTime转换为T-SQL时间

时间:2016-04-19 19:40:11

标签: c# asp.net sql-server datetime time

我尝试返回查询(在ASP.NET的gridview中)WHERE Time> = DateTime.Now.Add(-60)。 WHERE条款一直给我带来困难。

DateTime pastTime = DateTime.Now.Add(-60);    
ds_DB.SelectCommand = "SELECT * FROM [vPurchaseTotals] WHERE [TimeOfTransaction] >=  " + pastTime;

我的问题是让pastTime正确转换,所以它只返回较新的数据。 [TimeOfTransaction]是表格中的time(7)数据类型。

如何将C#' DateTime解析为SQL Server的Time

1 个答案:

答案 0 :(得分:1)

在这里,试试这个:

using(SqlConnection conn = new SqlConnection(yourConnectionString))
{
    DateTime pastTime = DateTime.Now.Add(-60); 

    ds_DB.SelectCommand = @"SELECT * FROM [vPurchaseTotals]
                            WHERE [TimeOfTransaction] >= @PastTime";

    SqlCommand cm = conn.CreateCommand();
    cm.CommandText = ds_DB.SelectCommand;

    cm.Parameters.Add("@PastTime", SqlDbType.Time).Value = pastTime.TimeOfDay; //For comparison with TSQL TIME type

    try
    {
        conn.Open();
        // Do what you need to do here.
    }
    catch(SqlException e)
    {
        // Handle Exception
    }
    finally
    {
        conn.Close();
    }
}

为了将来参考,您应始终参数化您的查询。它最终会更安全,更清洁/更容易阅读和调整。

编辑:您使用的是SqlDataAdapter课吗?那是什么ds_DB是一个实例?我个人只是为您的查询使用字符串值,然后像这样实现SqlDataAdapter

try
{
     conn.Open();

     using(SqlDataAdapter da = new SqlDataAdapter(cm))
     {
          da.Fill(DataTable dt);
     }
}