如何展示那些';的费用日期已过期,因此他们按月支付费用
本文关键字:他们 过期 日期 那些 何展示 | 更新日期: 2023-09-27 17:59:06
我正在为我的论文工作,在论文中我开发了一个GYM管理系统。我希望软件显示那些缴费日期到期的会员(学生),这样他们就可以被告知按月缴费。以下是表格定义:
-
成员(学生)m_idm_namem_photoetc
2.费用
f_id
f_金额
f_start_date
f_end_date
这是C#代码:
// here i get the current fees id so that the loop should run till it
SqlCommand getCurrentF_id = new SqlCommand("select IDENT_CURRENT('fees')", con);
int GotCurrentF_id = Convert.ToInt32(getCurrentF_id.ExecuteScalar());
int feesId;
//here is loop to find "select DATEDIFF(day,'f_start_date','getdate())" of all members
for (feesId = 1; feesId <= GotCurrentF_id; feesId++)
{
//here i get the f_start_date from sql server
SqlCommand f_start_DateCommand = new SqlCommand("select f_start_date from fees where f_id=" + feesId + "", con);
string f_start_dateCommand1 = Convert.ToString(f_start_DateCommand.ExecuteScalar());
//finding the date different between f_start_date and now
SqlCommand dateDiffBetweenNowNdStartDate = new SqlCommand("select datediff(day,'" + f_start_dateCommand1 + "',getdate())", con);
int finalDateDiff = Convert.ToInt32(dateDiffBetweenNowNdStartDate.ExecuteScalar());
if (finalDateDiff > 30)
{
da.SelectCommand = new SqlCommand("select * from members m, fees f where m.m_id=f.m_id and f.f_id="+feesId+"", con);
da.Fill(ds);
da.SelectCommand.ExecuteNonQuery();
dataGridView1.DataSource = ds.Tables[0];
让会员今天支付费用,所以他应该没事。不幸的是,他以前的f_start_date
记录将与今天的日期进行比较,并将显示在datagridview中,同一会员将显示他支付费用的次数。我想把他最近的(当前的)f_start_date
和current_date
进行比较,看看他是否过期,但不是他之前已经支付的费用开始日期。
如果有任何帮助,我将不胜感激。
您想要的(根据日期和成员的检索费用)似乎可以在sql语句中完全处理,所以您可以管理自己只执行一个SqlCommand,而不是执行许多由C#代码处理的查询。
select *
from
members m
, fees f
where
m.m_id=f.m_id
and datediff(day, f.f_start_date, getdate()) > 30
检索所有链接了所有费用的会员,但前提是开始日期超过了过去30天(ofc,检索已支付的费用..)
我不明白交一笔费用的条件是什么;最后一笔费用";成员。
如果设置了f_end_date
(如果支付了费用),它将类似于:
select *
from
members m
, fees f
where
m.m_id=f.m_id
and datediff(day, f.f_start_date, getdate()) > 30
and f_end_date is null
如果费用中存在的费用只是当前要支付的费用,则只按日期管理最后一笔费用:
select *
from
members m
, ( SELECT m_id,max(f_start_date) as f_start_date
FROM fees
GROUP BY m_id) f_lastfees
,fees f
where
m.m_id=f.m_id
and f.m_id = f_lastfees.m_id
and f.f_start_date = f_lastfees.f_start_date
and datediff(day, f.f_start_date, getdate()) > 30
将只检索过去30天内未支付最后费用的会员
如果您在sql中需要一些帮助,请在上面发表评论,但无论如何,请尝试直接在sql语句中检索所需的信息,这样可以更好地提高性能,并使代码更可读。
希望它能有所帮助;)
编辑
新的餐桌费用将包括:
f_id
f_amount
f_creation_date --used to know if fee is not paid over last 30days
f_paid_date --used to know if fee is paid or not (equals null if not paid)
最终请求看起来像
select *
from
members m
,fees f
where
m.m_id=f.m_id
and datediff(day, f.f_creation_date, getdate()) > 30
and f_paid_date is null
将根据费用表上的更改表,仅检索过去30天内未支付最后费用的Merber