我试图遍历 Order 表中的所有订单,并在调用此函数时更新每个订单的交付状态。
public void DateCheck()
{
if (sqlcon.State == ConnectionState.Closed)
{
sqlcon.Open();
}
SqlCommand cmd = new SqlCommand("SELECT * FROM Orders", sqlcon);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
sda.Fill(dt);
foreach (DataRow row in dt.Rows)
{
SqlCommand update = new SqlCommand("UPDATE Orders SET D_Status = @D_Status", sqlcon);
string deliverytype = row["D_Type"].ToString();
DateTime orderdate = DateTime.ParseExact(row["O_Date"].ToString(), "dd/MM/yyyy", null);
DateTime deliverydate = new DateTime();
if (deliverytype == "Standard")
{
deliverydate = orderdate.AddDays(7);
}
else if (deliverytype == "Express")
{
deliverydate = orderdate.AddDays(5);
}
else if (deliverytype == "One-Day")
{
deliverydate = orderdate.AddDays(1);
}
if (DateTime.Now >= deliverydate)
{
update.Parameters.AddWithValue("@D_Status", "Delivered");
update.ExecuteNonQuery();
}
else if (DateTime.Now >= deliverydate)
{
update.Parameters.AddWithValue("@D_Status", "Undelivered");
update.ExecuteNonQuery();
}
}
}
但是,它将所有状态更新为“已交付”,即使比较下面的代码给我“已交付”和“未交付”。
(DateTime.Now >= deliverydate)
有谁知道代码哪里出错了?如果是这样,请详细说明以帮助我更好地理解我的错误。
这条线
DateTime deliveryDate = new DateTime();
创建一个 deliveryDate 等于“01/01/0001 00:00:00”,当然添加 7,5 或 1 天不会给你一个有意义的日期来与 DateTime.Now 进行比较。
初始化 deliveryDate 变量的逻辑不清楚,但您可能需要使用 orderDate 对其进行初始化
DateTime deliverydate = orderDate;
正如其他人在他们的评论中所说,没有 WHERE 条件的 UPDATE 命令更新表中的所有记录。同样,您需要在这里进行某种初始化。可能,因为您使用 SELECT * FROM 语法,检索到的记录还包含记录的主键,因此您可以使用以下方法调整查询:
string cmdText = "UPDATE Orders SET D_Status = @D_Status WHERE OrderID = @id"
SqlCommand update = new SqlCommand(cmdText, sqlcon);
update.Parameters.AddWithValue("@id", Convert.ToInt32(row["OrderId"]));
.....
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句