在asp.net中安排更新日期

本文关键字:更新 日期 asp net | 更新日期: 2023-09-27 18:01:47

我想在asp.net (global.asax)中每24小时运行一次。我只是想检查当前日期和日期,这是存储到我的数据库一个接一个。如果日期小于当前日期,则在其中添加7天。

我只是在尝试,但没有关闭阅读器更新是不可能的。这种错误每次都出现。

private static void Task()
{
    String CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
    using (SqlConnection con = new SqlConnection(CS))
    {
        con.Open();
        DateTime Newdate;
        String ct = DateTime.Now.ToString("dd/MM/yyyy");
        DateTime CT = DateTime.ParseExact(ct, "dd/MM/yyyy", CultureInfo.InvariantCulture);
        SqlCommand cmd1 = new SqlCommand("select Date from tblInsertDate", con);
        cmd1.ExecuteNonQuery();
        SqlDataReader rdr = cmd1.ExecuteReader();
        while (rdr.Read())
        {
            DateTime dt = DateTime.ParseExact(rdr["Date"].ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture);
            int result = DateTime.Compare(dt, CT);
            if (result < 0)
            {
                Newdate = dt.AddDays(7);
                SqlCommand cmd2 = new SqlCommand("update tblInsertDate set Date=@Newdate", con);
                cmd2.Parameters.AddWithValue("@Newdate", Newdate);
                cmd2.ExecuteNonQuery();
            }
        }
    }
}

我在全局中制作时间表。在计时器的帮助下。

在asp.net中安排更新日期

您在reader.read()中使用相同的连接对象编写了更新查询。这意味着读取器在读取数据时将有一个打开的连接,同时另一个命令正在尝试使用相同的连接更新数据。您可以通过在同一循环中创建另一个连接对象或在reader关闭后创建相同的连接对象来修复此问题。我做了一个小小的改变,试着这样做:-,将更新查询置于阅读器循环之外

private static void Task()
{
    String CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
    using (SqlConnection con = new SqlConnection(CS))
    {
        con.Open();
        DateTime Newdate;
        String ct = DateTime.Now.ToString("dd/MM/yyyy");
        DateTime CT = DateTime.ParseExact(ct, "dd/MM/yyyy", CultureInfo.InvariantCulture);
        SqlCommand cmd1 = new SqlCommand("select Date from tblInsertDate", con);
        cmd1.ExecuteNonQuery();
        SqlDataReader rdr = cmd1.ExecuteReader();
       List<DateTime> dates=new List<DateTime();
        while (rdr.Read())
        {
            DateTime dt = DateTime.ParseExact(rdr["Date"].ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture);
            int result = DateTime.Compare(dt, CT);
            if (result < 0)
            {
                Newdate = dt.AddDays(7);
                dates.Add(Newdate);
            }
        }
        foreach(DateTime dt in dates)
        {
                SqlCommand cmd2 = new SqlCommand("update tblInsertDate set Date=@Newdate", con);
                cmd2.Parameters.AddWithValue("@Newdate", dt);
                cmd2.ExecuteNonQuery();
        }
    }
}