我想比较从数据库中选择的日期(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();
答案 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查询的日期。这样,如果服务器和客户端时钟不同步并且您计划在客户端上执行此操作,您将获得准确的比较