0

我想比较从数据库中选择的日期(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

4 回答 4

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 + "'";
于 2012-09-04T04:46:13.740 回答
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 字符串中选择状态

end = "SELECT EndDate, Message_Status " +
      "FROM Table_Message WHERE username = '" + username + "'";

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

希望有帮助。

于 2012-09-04T03:43:07.453 回答
0

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

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

TimeSpan spanTime=(dat1-dat2);

您可以SpanTime用于比较,例如spanTime.Days.

于 2012-09-04T03:32:16.953 回答
0

我的意见

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

于 2012-09-04T03:37:19.760 回答