Kontrola poprawności zapytania SQL wewnątrz kodu programu

0

Cześć,

zastanawiałem się ostatnio nad pewnym problemem:

Mamy sobie np. klasę cCar i dodatkowo w bazie danych tabelę Cars.
Ta tabela Cars ma pola Index_Car oraz Name.
W klasie cCar mam np. zapytanie "SELECT Name FROM Cars WHERE Index_Car = 1"

To zapytanie w tej klasie działa i wszystko jest pięknie.
Ale pewnego dnia zmieniam wewnętrz bazy danych nazwę pola Name na Nazwa
W tym momencie zapytanie wewnątrz klasy przestaje się wykonować poprawnie, ponieważ w tabeli Cars nie ma pola Name.
Kod oczywiście się kompiluje, bo kompilatora nie interesuje co jest między cydzysłowami.
Taki błąd jest łatwo wychwycić, gdy mamy mały programik.
Jednak przy dużej liczbie tabel przestaje już być śmiesznie.

Częściowym rozwiązaniem problemu jest wyprowadznie nazw pól tabel do np stałych i sklejanie w kodzie takiego zapytania np:
"SELECT " + CONST_Name + " FROM " CONST_Cars WHERE " + CONST_Index_Car + " = 1"

Niestety przy większych zapytaniach takie cuda są koszmarne w obsłudze i pisaniu.

Teoretycznie można też wszystkie zapytania wyrzucić do bazy danych w postaci sparametryzowanych funkcji i ewentulanie w ramach testów odpalać całą pulę takich zapytań sprawdzając, czy się prawidłowo wykonują.

Moje pytanie brzmi:
czy istnieją jakieś gotowe rozwiązania wspomagające zarządzanie kodem SQL wewnątrz kodu programu? Jak ludzie dają sobie radę z tym problemem.

pzdr

0

używając ORMa tworzysz sobie tzw mapowanie obiektowo -relacyjne. Odzwierciedlasz encje z bazy na obiekty, poprzez (w dużym uproszczeniu) konfigurowaniu mapowań Car.Name <-> (kolumna Name z tabeli Cars) itd.

W momencie inicjalizacji tego ORMa (w nHibernate np tworzenie SessionFactory), sprawdzane jest czy wszystkie mapowania mają sens (odnośniki na bazie się zgadzają). Dzięki czemu Twój główny problem zostaje rozwiązany. Dodatkowo, dzięki ORM możesz kompletnie pozbyć się zapytań SQL z kodu programu, co jeszcze bardziej ułatwia utrzymanie kodu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1