[c#] Aplikacja bazodanowa.

0

Witam.

Potrzebuję wykonać projekt aplikacji połączonej z bazą danych Formuły 1 (projekt na zaliczenie przedmiotu).
Program ma zawierać informacje na temat kierowców, zespołów, GP, newsy itd itd itd.
Całość znajduje się w bazie danych windowsowego Accesa.

Wykonałem już częściowo Okienka i teraz potrzebuję to zaprogramować.
Podłączyłem już za pomocą Server Explorera bazę tylko teraz kwestia pobierania danych.

Okienko wygląda mniej więcej tak (surowa forma):
user image
Na samej górze jest ComboBox do wyboru kierowcy.

Pytanie 1:
Jak pobierać do TextBoxów poszczególne dane z komórek bazy po uprzednim wyborze kierowcy?
Pytanie 2:
Jak zapisać w bazie accesa grafikę (zdjęcie kierowcy) a potem pobierać ją do PictureBoxa?
Pytanie 3:
Potrzebuję użyć w aplikacji jakiegoś wzorca projektowego (takie tam wymagane z góry). Osobiście jest mi to niepotrzebne i powiem szczerze że nie wiem co by to mogło być... Jakaś propozycja?

Byłbym wdzięczny za pomoc!

Ps. Użyłem do tego Accesa ale jakby ktoś znał jakieś lepsze i szybsze rozwiązanie to słucham.

Pozdrawiam,
~eL

0

Ad. 1:
Najnormalniej na świecie. Tworzysz sobie osobną klasę, która będzie miała za zadanie obsługiwać bazę. Na tej podstawie wykonujesz konkretne zapytania do bazy - select'y, updeat'y, delete'y itd.
Tworzysz sobie obiekt kierowcy, który posiada poszczególne właściwości. To, co odczytasz z bazy uzupełniasz w konkretnych polach. Następnie taki gotowy obiekt "wysyłasz" do widoku i uzupełniasz textBox'y kolejnymi wartościami.

Ad. 2
Nie wiem. Strzelam, że istnieje jakiś typ np. Image, który na to pozwala. Więcej tu - http://office.microsoft.com/en-us/access-help/store-images-in-a-database-HP005280225.aspx

Ad. 3
Podejrzewam, że chodzi o coś w stylu MVC/MVP (jeśli się mylę to mnie poprawcie).

Dlaczego wybrałeś Accessa, a nie np. MS SQL Server? Bardzo szybka integracja z VS i można obsługiwać bazę danych w miarę "nowoczesny" i normalny sposób. Do Accessa pewnie będziesz potrzebował konkretne connector'y oraz któryś z OleDB (teraz nie pamiętam, który). W dodatku MS SQL Server pozwala w łatwy sposób tworzyć procedury składowane, co jest wydajniejsze w obsłudze bazy.

0

Hmm... Powiem szczerze że nie wiem... Nigdy nie pisałem aplikacji bazodanowych, to jest mój pierwszy projekt tego typu.
Z Accessem miałem już wiele razy styczność dlatego pomyślałem żeby połączyć jedno z drugim...
Poszukam coś na temat MS SQL i może to trochę przerobię. Gdybyś był jednak tak miły i miał jakieś sprawdzone linki to chętnie bym przyjął.

Jeśli chodzi o 2 pkt to prawdopodobnie o to mi właśnie chodziło!

0

Jeśli nigdy nie używałeś SQL Server, to czas kiedyś zacząć ;).
Tu możesz ściągnąć wersję Express - http://www.microsoft.com/sqlserver/en/us/editions/2012-editions/express.aspx
A tu masz idealny na początek kurs SQL - http://www.w3schools.com/sql/default.asp

Możesz też robić z tym Accessem, ale jak mówię - upierdliwa robota.

0

Problem jest taki że na jutro muszę częściowo pokazać kod oraz działanie programu a z Accesem już trochę miałem...
No ale noc jest długa więc namówiłeś mnie! :)
Dzięki za linki. Kończę pobieranie SQL'a i biorę się do pracy!

0

Wiesz, zawsze możesz ten projekt już robić z Accessem bo coś masz. SQL Servera uczyć się podczas pisania innej aplikacji :).

0

Takie szybkie pytanie mam. Posiadam w bazie danych komórkę DataUrodzenia której typ wyznaczyłem jako 'date'.
Dlaczego pokazuje mi date + godzinę? Zmieniałem już na różne inne typy datowe i zawsze było to samo. Potrzebuję tylko datę i wg chociażby tej strony:
http://msdn.microsoft.com/en-us/library/ms186724.aspx
"date" powinno zwracać samą datę.
Szukałem jakiejś maski bądź coś w tym stylu żeby jakoś pozbyć się tej godziny, mimo to jednak, po wpisaniu daty, baza zostaje automatycznie uzupełniona o pola godziny.
Wygląda to wtedy tak:
1998-12-13 0000
Jak się tego pozbyć ?

0

Najprościej:

data = data.Substring(0,10);
0
eL napisał(a):

Szukałem jakiejś maski bądź coś w tym stylu żeby jakoś pozbyć się tej godziny, mimo to jednak, po wpisaniu daty, baza zostaje automatycznie uzupełniona o pola godziny.
Wygląda to wtedy tak:
1998-12-13 0000
Jak się tego pozbyć ?

Gdzie widzisz te dopisane godziny? W SSMS, w swojej aplikacji, czy gdzie?

0

Mam coś takiego:

 
int selectedIndex = comboBox1.SelectedIndex;
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = polacz;
            cmd.CommandText = "SELECT DataUtworzenia FROM Tory WHERE Id_Tory=" + selectedIndex;
            SqlDataReader czytaj = cmd.ExecuteReader();
            {
                if (czytaj.Read())

                    textBox1.Text = czytaj[0].ToString();

                czytaj.Close();

Z listy ComboBoxa wybieram pole po czym wyszukuje mi z tablicy reszte informacji i wyświetla je na TextBoxach (tu tylko wrzuciłem część kody dotyczący mojego zapytania).
Generalnie nie wiem czy to jest dobra forma pisania ponieważ pierwszy raz piszę taką aplikację (dlatego proszę o poprawkę ewentualnych błędów). Nie mniej jednak póki co wszystko działa po mojej myśli, prócz tej daty.

0

Czyli te 00:00:00 widzisz w tym TextBoxie?
W takim razie wynika to z konwersji danych odczytanych z bazy, a nie z tego, że w bazie siedzą godziny (bo nie siedzą).
Spróbuj tak:

textBox1.Text = ((DateTime)czytaj[0]).ToShortDateString();
0

Masz rację, przeglądając zawartość bazy, nie ma tam tej godziny.

Co do Twojej propozycji to kompilować się kompiluje ale później wywala błąd:
Specified cast is not valid.

Także koncepcja możliwe że dobra jednakże rzutowanie coś nie działa.

0

Sprawdź jakiego typu jest czytaj[0], np. podglądając w debugerze, albo w trakcie debugowania wywołując czytaj[0].GetType() w Immediate Window.

0

Aj, wybacz, moja wina.
Twój sposób z:
textBox3.Text = ((DateTime)czytaj[2]).ToShortDateString();

Zadziałał. Podstawiłem błędnie inny obiekt.
czytaj[2] jest obiektem typu data.time

A ja przypadkiem podstawiłem pod inta dlatego wyrzucał mi bład...
W każdym razie po podpatrzeniu na checkpointach połapałem się, dziękuję bardzo!

Temat mimo wszystko niech może jednak lepiej pozostanie aktywny ponieważ w razie pytań (a pewnie takowe będę miał) nie ma sensu zakładać kolejnego.

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