首页 > 解决方案 > 当日期值超出给定日期时如何更新数据列

问题描述

我的 BorrowedBook 表中有两个日期数据类型(dateBorrowed 和 dueDate)和一个状态列。现在,当图书在到期日之后没有归还时,我想自动将状态从“未归还”更新为状态=“过期”。

我努力了

public void DueDate()
    {
        if (frmissue.dtIssueDate.Value > frmissue.dtDueDate.Value)
        {
            cn.Open();
            cm = new SqlCommand("UPDATE tblBorrowedBook SET status = 'Overdue' WHERE borrowID = @borrowID", cn);
            cm.Parameters.AddWithValue("@borrowID", lblID.Text);
            cm.ExecuteNonQuery();
            cn.Close();
        }
    }

但它不会更新任何东西。我确实想尝试通过 SQL 查询来做到这一点,但我不知道如何开始。

我也尝试过类似的东西:

frmBooksOnHand frm = new frmBooksOnHand(this);
        cn.Open();
        cm = new SqlCommand("SELECT dueDate FROM tblBorrowedBook AS dueDate", cn);
        dr = cm.ExecuteReader();
        while (dr.Read())
        {
            dtDueDateTime.Value = Convert.ToDateTime(dr["dueDate"]);
        }
        dr.Close();
        cn.Close();

        if (dtDueDateTime.Value > DateTime.Now)
        {
            cn.Open();
            cm = new SqlCommand("UPDATE tblBorrowedBook SET status = 'Overdue'", cn);
            cm.ExecuteNonQuery();
            cn.Close();
        }

我需要的:

dateBorrowed > dueDate(来自数据库值)

更新状态 = '过期'

标签: c#sql-serverwinforms

解决方案


首先在你的 SQL Server 中创建一个存储过程

Create Procedure sp_UpdateStatus @borrowID int

as

Begin

declare @dutedate as datetime
select @dutedate = dueDate from tblBorrowedBook where borrowID = @borrowID

IF @duedate < GETDATE()
UPDATE tblBorrowedBook SET status = 'Overdue' WHERE borrowID = @borrowID

End

现在在代码中,而不是您的 query 调用存储过程。

using (SqlConnection con = new SqlConnection(dc.Con)) {
using (SqlCommand cmd = new SqlCommand("sp_UpdateStatus", con)) {
  cmd.CommandType = CommandType.StoredProcedure;

  cmd.Parameters.AddWithValue("@borrowID", int.Parse(lblID.Text));

  con.Open();
  cmd.ExecuteNonQuery();
}}

希望这可以帮助。

注意:未经测试的代码和查询。但希望你能改正。


推荐阅读