Найти способ зарегистрироваться с графом [ трудно ]
Не могли бы вы помочь мне найти решение моей проблемы? Я использую базу данных SQL Server, это гимнастическая программа, и я хочу получить регистрацию клиента , когда он приходит в спортзал , у меня есть два способа предложить первый-ежемесячный способ, а второй-ежедневный, первый у меня нет проблем с ним, и я использую этот код для регистрации.;
using (SqlCommand com = new SqlCommand("select count(*)from enddate where ID=@ID and startdate <=@C1 and endDate >=@C2", con)) { com.Parameters.AddWithValue("@ID", ID.Text); com.Parameters.AddWithValue("@C1", DateTime.Now); com.Parameters.AddWithValue("@C2", DateTime.Now); int count = (int)com.ExecuteScalar(); if (count > 0) { using (SqlCommand com1 = new SqlCommand("INSERT INTO [checkin] (ID,time,username) VALUES (@ID,@time,@username)", con)) { com1.Parameters.AddWithValue("@ID", ID.Text); com1.Parameters.AddWithValue("@time", txttime.Text); com1.Parameters.AddWithValue("@username", txtusername.Text); com1.ExecuteNonQuery(); } MetroFramework.MetroMessageBox.Show(this, "Check In Sucssesfuly ................... ", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MetroFramework.MetroMessageBox.Show(this, "this ID Expired .....................", "Message", MessageBoxButtons.OK, MessageBoxIcon.Warning); } con.Close(); }
Я хочу добавить к этому коду второе условие ( ежедневное предложение ) у меня есть таблица enddate, например ;
| ID | Startdate | month | day | enddate | offer | | 1 | 20-3-2019 | 3 |null |20-6-2019|( summer ) monthly | | 2 | 20-3-2019 | null | 5 |20-3-2019|( student ) daily |
в этом случае первый может прийти в любое время в течение 3 месяцев, во втором ID он может прийти только 5 раз.
мой контрольный стол ;
| ID | Time | username | | 1 | 21-3-2019| test | | 1 | 25-3-2019| test | | 2 | 27-3-2019| test 2 |
Я могу сосчитать сколько раз он приходит в спортзал но я не знаю как добавить это в свой код
Что я уже пробовал:
<pre>var goodForVisit = false; int visitedCount; int offerDayCount; var endDate = DateTime.MinValue; DateTime startDate = DateTime.MinValue; using (SqlConnection con = new SqlConnection("Data Source=SQL5037.site4now.net;Initial Catalog=DB_A448D1_Dragon;User Id=**********;Password=************")) { con.Open(); //try //{ using (SqlCommand com = new SqlCommand("select * from [enddate] where ID=@ID", con)) { com.Parameters.AddWithValue("@ID", ID.Text); using (SqlDataReader reader = com.ExecuteReader()) { if (reader.Read()) { //get information from enddate table var offer = reader["offer"].ToString(); if (reader["day"] != null) offerDayCount = (int)reader["day"]; startDate = (DateTime)reader["StartDate"]; if (reader["endDate"] != null) endDate = (DateTime)reader["endDate"]; if (reader["month"] == null && offer != null) { endDate = DateTime.Now.Date; } //count the visit from checkin table using (var com2 = new SqlCommand("SELECT COUNT(*) as count From checkin WHERE time >= @STARTDATE and (time <= @ENDDATE)")) { com2.Parameters.AddWithValue("@STARTDATE", startDate); com2.Parameters.AddWithValue("@ENDDATE", endDate); using (SqlDataReader reader2 = com2.ExecuteReader()) { if (reader2.Read()) { visitedCount = (int)reader2["count"]; if (offer != null && visitedCount < offerDayCount) goodForVisit = true; if (offer != null && DateTime.Now >= startDate && DateTime.Now <= endDate) goodForVisit = true; } } } } } } if (goodForVisit) { using (SqlCommand com1 = new SqlCommand("INSERT INTO [checkin] (ID,time,username) VALUES (@ID,@time,@username)", con)) { com1.Parameters.AddWithValue("@ID", ID.Text); com1.Parameters.AddWithValue("@time", txttime.Text); com1.Parameters.AddWithValue("@username", txtusername.Text); com1.ExecuteNonQuery(); } MetroFramework.MetroMessageBox.Show(this, "Check In Sucssesfuly ................... ", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MetroFramework.MetroMessageBox.Show(this, "this ID Expired .....................", "Message", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
Richard MacCutchan
Просто предположение ...
Если регистрация рассчитана на месяц, то установите maxvisits равным -1 и проверьте дату окончания.
Если регистрация рассчитана на один день, то установите maxvisits равным 5 и игнорируйте конечную дату.
Maciej Los
Звучит как решение проблемы ;)