【问题标题】:How to update data column when date value is beyond the given date当日期值超出给定日期时如何更新数据列
【发布时间】:2020-03-28 11:02:16
【问题描述】:

我的 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(来自数据库值)

更新状态 = '过期'

【问题讨论】:

  • 如果 borrowID 列是 int 类型,那么 cm.Parameters.AddWithValue("@borrowID", int.Parse(lblID.Text));
  • @AJITH 我已经尝试过了,我发现 dtIssueDate.Value 和 dtDueDate.Value 不是数据库中的值
  • 有没有办法用查询来做这个?
  • "有没有办法用查询来做这件事?"您甚至不应该将其存储在表格中。创建一个将当前时间与到期时间进行比较的视图,并基于此输出状态。然后状态会“自动”更新。

标签: c# sql-server winforms


【解决方案1】:

首先在你的 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

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

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();
}}

希望这会有所帮助。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-16
    • 2019-07-01
    • 2019-07-01
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多