繁体   English   中英

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

[英]Converting C# DateTime to T-SQL Time in SelectCommand

我试图返回一个查询(在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

在这里,尝试一下:

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);
     }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM