【发布时间】:2018-04-25 01:37:02
【问题描述】:
我目前有一个名为“Events”的表,其中包含“EquipApprovedDate”、“EquipCalDueDate”和“ThemeColor”列。我想根据 EquipCalDueDate 之前的剩余天数更新 ThemeColor。
绿色 = 好
橙色 = 认为还可以
红色 = 严重
日历上注册的每个设备的总天数会有所不同。它将使用此公式计算(totaldays = EquipCalDueDate - EquipApprovedDate)。剩余天数将使用此公式计算(remainingDays = EquipCalDueDate - DateTime.Now)。
如果 remainingDays 超过 totaldays 的 2/3,它将被标记为“绿色”。
如果 remainingDays 小于 totaldays 的 2/3 但超过 totaldays 的 1/3将被标记为“橙色”。
如果 remainingDays 小于 totaldays 的 1/3,它将被标记为“红色”。
我想在每次加载页面时在表上应用整个过程,特别是在数据库中找到的每一行。基本上是收集数据并为每一行返回它。目前,它仅在 ThemeColor 列更新为每行的“绿色”的部分运行,无论如何。什么是正确的 SQL 查询?
我已附上我目前的作品以供您查看。
con.Open();
string yyy = "SELECT * FROM [Events]";
using (SqlCommand cmd = new SqlCommand(yyy, con))
{
SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
String startdate = reader["EquipApprovedDate"].ToString();
DateTime Sdate = DateTime.Parse(startdate);
String enddate = reader["EquipCalDueDate"].ToString();
DateTime Edate = DateTime.Parse(enddate);
String themecolor = reader["ThemeColor"].ToString();
double totaldays = (Edate - Sdate).TotalDays;
double remainingDays = (Edate - DateTime.Now).TotalDays;
if (remainingDays > (totaldays * (2 / 3)))
{
string sqlCoC = "UPDATE Events SET ThemeColor = 'green'";
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MVCConnectionString"].ConnectionString))
{
SqlCommand coccmd = new SqlCommand(sqlCoC, con);
con.Open();
coccmd.ExecuteNonQuery();
con.Close();
}
//green = means good
}
else if ((remainingDays < (totaldays * (2 / 3))) && (remainingDays > (totaldays * (1 / 3))))
{
string sqlCoC = "UPDATE Events SET ThemeColor = 'orange'";
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MVCConnectionString"].ConnectionString))
{
SqlCommand coccmd = new SqlCommand(sqlCoC, con);
con.Open();
coccmd.ExecuteNonQuery();
con.Close();
}
//orange = considered okay
}
else if (remainingDays < (totaldays * (1 / 3)))
{
string sqlCoC = "UPDATE Events SET ThemeColor = 'red'";
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MVCConnectionString"].ConnectionString))
{
SqlCommand coccmd = new SqlCommand(sqlCoC, con);
con.Open();
coccmd.ExecuteNonQuery();
con.Close();
}
//red = critical
}
else { }
}
reader.Close();
con.Close();
}
【问题讨论】:
-
EquipCalDueDate和EquipApprovedDate使用什么数据类型?如果是字符类型,那么日期的格式是什么? -
在表格中都设置为“日期”。
-
我刚刚更新了我的问题,附有表格数据和为您设计的视图。
标签: sql mdf database-table local-database