c# - 当日期值超出给定日期时如何更新数据列
问题描述
我的 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(来自数据库值)
更新状态 = '过期'
解决方案
首先在你的 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();
}}
希望这可以帮助。
注意:未经测试的代码和查询。但希望你能改正。
推荐阅读
- php - 单个查询中的多个联接
- ios - 如何在 WKWebView 中覆盖 urlRequest
- web-scraping - 如何在jsoup中加载文档之前获取http内容长度
- amazon-web-services - AWS 控制台会话超时
- python - 嵌套 for 循环在 Python 中花费大量时间(优化)
- node.js - Websocket同步两路连接
- java - 如何在groovy测试用例中验证java的arraylist的每个条目
- vba - 为什么这个 VBA 代码会破坏 Excel?
- c++ - 流默认具有哪种语言环境
- node.js - 节点 JS - TypeError:无法读取未定义的属性“CONTEXT_1”