Как получить совпадающие даты из двух разных таблиц в одной БД?
У меня есть три разных стола:
1)увольнения сотрудника
2) Заказ завтрака
3) Отмена Завтрака
Отпуск работник имеет столбцы: "Si_no, EmpCode, столбец empname, обозначение, Leave_Type, LFrom, ЛТО Numbersof_leave, причины, информация, комментарии"
Заказ завтрака имеет: "Emp_ID, Order_For_Date, Order_Day, Order_From, блюдо, цена, количество, Company_Limit, Extra_Chgs, Total_Cost, Ordered_Date, Emp_Name"
Сейчас,
когда пользователь представить листьев (половину дня(LFrom) / полный день(LFrom) / дополнительный отпуск(LFrom и ЛТО))
Его / ее заказ на завтрак (Order_For_Date) должен быть отменен для дат применения отпуска(LFrom to LTo), а данные для совпадающих дат должны быть удалены из таблицы заказов на завтрак и вставлены в таблицу отмены завтрака.
Плз, помоги мне...
Что я уже пробовал:
public void deletebreakfast() { DataTable Breakfast = new DataTable(); var date = DateTime.Now; var nextSundayy = date.AddDays(7 - (int)date.DayOfWeek); string today = DateTime.Now.ToString("yyyy-MM-dd"); string nextsunday = nextSundayy.ToString("yyyy-MM-dd"); cmd = new SqlCommand("select * from tb_Breakfast_data where Order_For_Date between '" + today.Trim() + "' and '" + nextsunday.Trim() + "' and Emp_ID = '" + Session["EmpCode"].ToString() + "'", Connectivity.cn); SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(Breakfast); if (dd2.SelectedItem.Text == "Half Day Leave" || dd2.SelectedItem.Text == "Full Day Leave") { foreach (DataRow dr in Breakfast.Rows) { if() try { string Fdate = "", Todate = "", Empcode = ""; try { Fdate = dr["LFrom"].ToString(); } catch { } try { Todate = dr["LTo"].ToString(); } catch { } try { Empcode = dr["EmpCode"].ToString(); } catch { } string Query1 = ""; string Query2 = ""; if (Todate.Trim() == "") { Query1 = "select * from tb_Breakfast_data where Order_For_Date = '" + Fdate.Trim() + "' and Emp_ID='" + Empcode.Trim() + "'"; Query2 = " } else { DateTime startDate ; DateTime endDate ; string date1 = ""; { for (DateTime dt = startDate; dt <= endDate; dt = dt.AddDays(1.0)) { date1 = Convert.ToString(date); allDateb.Add(date1); } return allDateb;
Richard MacCutchan
Почему вы храните даты и идентификатор сотрудника в виде текста, а не натуральных значений? Вот только делает это трудно, чтобы найти данные, которые вас интересуют.
Maciej Los
Не конвертируйте даты в строку! Вы должны работать на свиданиях.
ZurdoDev
Что не работает? Где ты застрял?
Member 13201220
есть логика, но не в состоянии ее реализовать.
(для текущей даты до следующих семи дней)
случай 1: (для отпуска на полдня / полный день) сначала получите данные столбца Order_for_date из таблицы Breakfast, а затем получите lfrom dates из таблицы employee leave = & gt; сравните оба, если они совпадают переместите данные совпадающих дат в новую таблицу Breakfast cancel.
Случай 2 (дополнительный отпуск): получить Order_for_date данные столбца с завтраком, то вам LFrom в ЛТО столбцы данных =&ГТ;сравните также рассмотреть сроки между LFrom в ЛТО' если сочетается движение к завтраку отменить таблице. (EmpCode=Emp_ID). (Завтрак должен быть отменен на все даты, на которые работник подал заявление об отпуске)
Не в состоянии реализовать.
предложите, если есть какой-нибудь другой способ получить это.
Richard Deeming
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов / OWASP[^]
CHill60
catch { }
это так плохо. Не делай этого. Удалите все ваши try-catch
блоки. Все они. Все до единого. Тогда прочтите это: Рекомендации по обработке исключений в .NET[^]
Member 13201220
Спасибо всем за помощь.. задание выполнено.