/// <summary> /// Zapisuje w bazie danych podane informacje o pacjencie. /// </summary> /// <param name="patient">Informacje do zapisania. Wartość null powoduje, że ta metoda zwraca wartość false.</param> /// <returns> /// true jeśli zapisano pomyślnie, /// null jeśli podane informacje nie przeszły walidacji po stronie bazy, /// false jeśli wystąpił inny błąd lub podany argument to null. /// </returns> public bool?SavePatient(Patient patient) { bool?retval = false; if (patient != null) { // stworzenie nowej encji, przepisanie wartości M_Patient entity = new M_Patient(); entity.Apartment = patient.Apartment; entity.BirthDate = patient.BirthDate; entity.BuildingNumber = patient.BuildingNumber; entity.City = patient.City; entity.FirstName = patient.FirstName; entity.Gender = patient.Gender; entity.IsInsured = patient.IsInsured; entity.LastName = patient.LastName; entity.Pesel = patient.Pesel; entity.Post = patient.Post; entity.PostalCode = patient.PostalCode; entity.SecondName = patient.SecondName; entity.Street = patient.Street; // ID > 0 -> zmiana danych istniejącego w bazie pacjenta if (patient.Id > 0) { retval = patientService.UpdatePatient(entity); } else { retval = patientService.InsertPatient(entity); } } return(retval); }
/// <summary> /// Pobiera z bazy danych informacje o wskazanym pacjencie. /// </summary> /// <param name="patientId">ID szukanego pacjenta.</param> /// <returns> /// Obiekt reprezentujący rekord z tabeli M_Patients, /// null jeżeli nie znaleziono pacjenta o podanym ID. /// </returns> public M_Patient SelectPatient(int patientId) { M_Patient entity = null; // utworzenie obiektu kontekstu bazodanowego db = new MedicalCenterDBContainer(); // pobranie encji entity = db.M_Patients.Find(patientId); // usunięcie obiektu kontekstu bazodanowego db.Dispose(); return entity; }
/// <summary> /// Pobiera z bazy danych informacje o pacjencie posiadającym wskazany nr PESEL. /// </summary> /// <param name="pesel">Nr PESEL szukanego pacjenta.</param> /// <returns>Obiekt z danymi pacjenta lub null jeśli nie znaleziono w tabeli podanego numeru PESEL.</returns> public Patient GetPatient(long pesel) { Patient patient = null; // pobranie z bazy rekordu dot. pacjenta o podanym nr PESEL M_Patient e = patientService.SelectPatient(x => x.Pesel == pesel); // jeśli znaleziono w tabeli podany PESEL, zwracany jest obiekt z danymi pacjenta if (e != null) { patient = new Patient(e.Id, e.LastName, e.FirstName, e.SecondName, e.BirthDate, e.Gender, e.Pesel, e.Street, e.BuildingNumber, e.Apartment, e.PostalCode, e.City, e.Post, e.IsInsured); } return(patient); }
/// <summary> /// Pobiera z bazy danych informacje o wskazanym pacjencie. /// </summary> /// <param name="predicate">Funkcja (predykat) sprawdzająca warunek dla każdego elementu. Wartość null powoduje, że ta metoda również zwraca null.</param> /// <returns> /// Obiekt reprezentujący rekord z tabeli M_Patients, /// null jeżeli nie znaleziono pacjenta odpowiadającego podanym warunkom lub podany argument to null. /// </returns> public M_Patient SelectPatient(System.Linq.Expressions.Expression<Func<M_Patient, bool>> predicate) { M_Patient entity = null; if (predicate != null) { // utworzenie obiektu kontekstu bazodanowego db = new MedicalCenterDBContainer(); // pobranie encji entity = db.M_Patients.FirstOrDefault(predicate); // usunięcie obiektu kontekstu bazodanowego db.Dispose(); } return entity; }
/// <summary> /// Pobiera z bazy dane o pacjencie i zwraca jego nazwisko i imię. /// </summary> /// <param name="patientId">ID pacjenta.</param> /// <returns> /// Nazwisko i imię wskazanego pacjenta, oddzielone spacją, /// null jeśli nie znaleziono pacjenta o podanym ID. /// </returns> public string GetPatientName(int patientId) { if (patientId > 0) { M_Patient patient = patientService.SelectPatient(patientId); if (patient != null) { return(patient.LastName + " " + patient.FirstName); } else { return(null); } } else { return(null); } }
/// <summary> /// Aktualizuje w bazie danych rekord o wskazanym pacjencie. /// </summary> /// <param name="patient">Zaktualizowane informacje o pacjencie. Wartość null powoduje, że ta metoda zwraca false.</param> /// <returns> /// true jeśli zaktualizowano pomyślnie, /// null jeśli wystąpił błąd aktualizacji, /// false jeśli wystąpił inny błąd lub podany argument to null. /// </returns> public bool? UpdatePatient(M_Patient patient) { bool? retval = true; if (patient != null) { db = new MedicalCenterDBContainer(); // przechowuje liczbę wierszy, jaka została dodana/zmieiona podczas wskazanej operacji int rowsAffected = 0; // referencja do encji, która ma zostać zmieniona M_Patient record = null; try { // szukanie encji o podanym ID record = db.M_Patients.FirstOrDefault(x => x.Pesel == patient.Pesel); } catch (InvalidOperationException ioe) { System.Console.WriteLine(ioe.Message); retval = false; // utworzenie nowego obiektu kontekstu bazodanowego db.Dispose(); db = new MedicalCenterDBContainer(); } // jeśli znaleziono encję o podanym ID, następuje aktualizacja jej właściwości if (record != null) { if (retval == true) { record.Apartment = patient.Apartment; record.BirthDate = patient.BirthDate; record.BuildingNumber = patient.BuildingNumber; record.City = patient.City; record.FirstName = patient.FirstName; record.Gender = patient.Gender; record.IsInsured = patient.IsInsured; record.LastName = patient.LastName; record.Pesel = patient.Pesel; record.Post = patient.Post; record.PostalCode = patient.PostalCode; record.SecondName = patient.SecondName; record.Street = patient.Street; try { // synchronizacja zbioru danych z bazą danych rowsAffected = db.SaveChanges(); } catch (System.Data.Entity.Infrastructure.DbUpdateConcurrencyException concurrencyException) { System.Console.WriteLine(concurrencyException.Message); // jeśli wystąpił ten błąd i nowy rekord nie został zapisany w tabeli, podejmowana jest jeszcze jedna próba zapisu if (rowsAffected == 0) { db.Dispose(); db = new MedicalCenterDBContainer(); try { rowsAffected = db.SaveChanges(); } catch (Exception exception) { System.Console.WriteLine(exception.Message); // jeśli druga próba również zakończyła się niepowodzeniem, zwracana jest informacja o błędzie retval = false; } } } catch (System.Data.Entity.Infrastructure.DbUpdateException updateException) { System.Console.WriteLine(updateException.Message); Exception ex = updateException; // szukanie właściwego wyjątku if (ex.InnerException != null) { while (ex.InnerException != null) ex = ex.InnerException; // jeśli istniał jakiś wewnętrzy wyjątek, wyświetlona zostanie jego wiadomość System.Console.WriteLine(ex.Message); } // podana encja nie przeszła walidacji retval = null; } catch (Exception ex) { System.Console.WriteLine(ex.Message); // inny błąd retval = false; } } } // jeśli nie znaleziono encji o podanym ID, zgłaszane jest to jako błąd else retval = false; db.Dispose(); } else retval = false; return retval; }
/// <summary> /// Zapisuje w bazie danych nowy rekord dla pacjenta, wpisując do niego podane informacje. /// </summary> /// <param name="newPatient">Informacje o nowym pacjencie. Wartość null powoduje, że ta metoda zwraca false.</param> /// <returns> /// true jeśli wstawiono pomyślnie, /// null jeśli wystąpił błąd aktualizacji, /// false jeśli wystąpił inny błąd lub podany argument to null. /// </returns> public bool? InsertPatient(M_Patient newPatient) { bool? retval = true; if (newPatient != null) { db = new MedicalCenterDBContainer(); // dodanie nowej encji do lokalnego zbioru db.M_Patients.Add(newPatient); // przechowuje liczbę wierszy, jaka została dodana/zmieiona podczas wskazanej operacji int rowsAffected = 0; try { // synchronizacja zbioru danych z bazą danych rowsAffected = db.SaveChanges(); } catch (System.Data.Entity.Infrastructure.DbUpdateConcurrencyException concurrencyException) { System.Console.WriteLine(concurrencyException.Message); // jeśli wystąpił ten błąd i nowy rekord nie został zapisany w tabeli, podejmowana jest jeszcze jedna próba zapisu if (rowsAffected == 0) { try { rowsAffected = db.SaveChanges(); } catch (Exception exception) { System.Console.WriteLine(exception.Message); // jeśli druga próba również zakończyła się niepowodzeniem, zwracana jest informacja o błędzie retval = false; } } } catch (System.Data.Entity.Infrastructure.DbUpdateException updateException) { System.Console.WriteLine(updateException.Message); Exception ex = updateException; // szukanie właściwego wyjątku if (ex.InnerException != null) { while (ex.InnerException != null) ex = ex.InnerException; // jeśli istniał jakiś wewnętrzy wyjątek, wyświetlona zostanie jego wiadomość System.Console.WriteLine(ex.Message); } // podana encja nie może zostać dodana (np. z powodu złamania ograniczenia unikatowości) retval = null; } catch (Exception ex) { System.Console.WriteLine(ex.Message); // inny błąd retval = false; } db.Dispose(); } else retval = false; return retval; }