如何使用C#比较数据库中的日期?

时间:2012-09-04 03:25:52

标签: c# sql-server-2008

我想比较从数据库中选择的日期(EndDate中的每个条目),并将它们与今天的日期进行比较。有没有办法以编程方式执行此操作?比如提取日期并单独比较它们?我需要这个,因为我需要更新表的状态。

string username;
username = HttpContext.Current.User.Identity.Name;
string date = DateTime.Now.ToString("MM/dd/yyyy");
txtDate.Text = date;


SqlConnection conn1 = 
    new SqlConnection("Data Source=mydatasource\\sqlexpress;" 
                     + "Initial Catalog = Suite2; Integrated Security =SSPI");
SqlDataAdapter adapter;
string end;
end = "SELECT EndDate FROM Table_Message WHERE username = '" + username + "'";
adapter = new SqlDataAdapter(end, conn1);
conn1.Open();
DataSet ds = new DataSet();
adapter.Fill(ds);
//Execute the sql command
GridView2.DataSource = ds;
GridView2.DataBind();
conn1.Close();

4 个答案:

答案 0 :(得分:1)

我只是修改SQL查询来进行比较而不是代码。

用这个替换你的SQL。

end = "SELECT EndDate, " +
      "case when EndDate >= CURRENT_TIMESTAMP then 'Expired' " +
      "when StartDate <= CURRENT_TIMESTAMP then 'Pending' " +
      "else 'NotExpired' " +
      "end " +
      "as MessageStatus " +
      "FROM Table_Message WHERE username = '" + username + "'";

这应该返回两列。 EndDate之一,另一个是今天之前还是之后。

修改

我意识到你想要更新数据库中的表而不仅仅是返回它。在这种情况下,您将需要执行sql语句来更新相应的列,然后选择它们。例如

 SqlCommand updateDatabase = new SqlCommand();
 updateDatabase.CommandText = "update dbo.Table_Message set Message_Status = case when EndDate >= CURRENT_TIMESTAMP then 'Expired' when StartDate <= CURRENT_TIMESTAMP then 'Pending' else 'NotExpired'";
 updateDatabase.ExecuteNonQuery();

然后,您可以直接从原始查询sql string

中选择状态
end = "SELECT EndDate, Message_Status " +
      "FROM Table_Message WHERE username = '" + username + "'";

说完了。我强烈建议你不要这样做。您不应该更新/存储数据库中当前状态之类的内容。每次在您的情况下进行更新时,您将进行非常昂贵的数据库操作。不仅如此,列的含义每秒都会改变,每毫秒一次。什么是“过期”消息实际上取决于您检查的日期。这种数据不应存储在数据库中。您应该解释哪些消息已过期或哪些消息不是每次都过期。您可以在C#代码中执行此操作,也可以像我最初建议的那样在SQL查询中执行此操作。您的数据库中不应该有一个列,其值可能每秒都会更改。这是我的意见。

希望有所帮助。

答案 1 :(得分:1)

   end = "UPDATE Table_Message SET message_status=CASE WHEN EndDate>GETDATE() then 'Expired' WHEN StartDate<GETDATE() then 'Pending' else 'Ongoing' END WHERE username = '" + username + "'";

答案 2 :(得分:0)

首先,您需要从数据库中获取日期。

DateTime dat1 = DateTime.Parse(2003-12-30); 
DateTime dat2 = DateTime.Parse(2004-12-30); 

TimeSpan spanTime=(dat1-dat2);

您可以使用SpanTime进行比较,例如spanTime.Days

答案 3 :(得分:0)

我的意见

首先如果全部。您打算在客户端还是服务器端使用此代码。你也可以使用datediff函数比较sql server查询的日期。这样,如果服务器和客户端时钟不同步并且您计划在客户端上执行此操作,您将获得准确的比较