[C#, SQL] Aplikacja (C#) + baza danych (SQL) = ..? ADO.NET?


(Ufolec) #1

Napisałem aplikację w C# (praktycznie pełen interfejs) - ok

Napisałem kod bazy danych w SQL (Microsoft SQL Server) - ok

Teraz chciałbym połączyć C# z SQL by powstała aplikacja bazodanowa :slight_smile: Lecz nie mam (niemalże) zupełnie pojęcia jak się do tego zabrać.

Czego najlepiej użyć w tym przypadku? ADO.NET [Eng]? Słyszałem też o LINQ [PL] [Eng], choć w przypadku tego drugiego nie wgłębiałem się zbytnio.

Jeśli więc ADO.NET to czy znacie (i np. polecacie) jakiś dobry kurs/tutorial w języku polskim? (j. polski jest dla mnie bardziej przyswajalny, szczególnie przy "raczkowaniu" w danej dziedzinie informatyki). Chodzi mi głównie o poznanie tego od strony praktycznej, czyli co i jak zrobić by móc umieścić swoją bazę i odwoływać się do niej przy konkretnych komponentach w C#?

PS. Angielskich tutoriali widziałem, że jest kilka, jak chociażby ten:

The C# Station ADO.NET Tutorial

http://www.csharp-station.com/Tutorials ... son01.aspx

Jeśli ktoś z was siedzi w tej tematyce, czyli przy aplikacjach bazodanowych to prosiłbym o pomoc w tej właśnie dziedzinie :slight_smile:

Wielkie dzięki za każdą odpowiedź pod moim tematem.

-- Dodane 31.05.2010 (Pon) 11:53 --

Z powodu, że dostaję co pewien czas informacje o odkopaniu mojego tematu przez osoby z podobnym problemem, chciałbym poinformować, że jeszcze w 2009 roku projekt jaki wówczas realizowałem został ukończony, a rozwiązanie jakie wybrałem to: aplikacja okienkowa (napisana z pomocą C#), baza danych lokalna (MS SQL), a komunikacja między aplikacją, a bazą odbywa się dzięki ADO.NET, czyli tak jak początkowo planowałem. :slight_smile: Póki co nie realizowałem jeszcze rozwiązań z LINQ, czy też ze zdalną bazą + WinForm's. Obecnie realizuję aplikacje internetowe z użyciem ASP.NET + C# i oczywiście z bazą na serwerze :slight_smile: Pozdrawiam.


(Fiołek) #2

O ADO.NET masz dużo na MSDN. Jest tam nawet coś po polsku(wydaje się znośne). Dużo linków jest też na dole strony w angielskiej Wikpedii.

Ja jednak wolę Linq To Sql(dużo informacji w MSDN). Scott Guthrie napisał też dość ciekawy kurs. Nie masz co liczyć na polskie tutoriale, jeśli są to opisują wszystko bardzo pobieżnie i jest ich bardzo mało(możesz poszukać na codeguru.pl).


(somekind) #3

Co to jest "kod bazy danych"? Chodzi Ci o procedury składowane, funkcje i wyzwalacze? Jeśli to masz, to lepiej użyć ADO.NET (klasa SqlCommand i jej metody, np.: ExecuteScalar).

Jeśli w bazie masz tylko tabele i nie potrzebujesz wydajnego rozwiązania, to szybciej i wygodniej będzie wykonać ORM przy użyciu LINQ to SQL.


(Ufolec) #4

Fiołek - thx za link do tego czegoś "znośnego" po polsku, może się przyda :slight_smile: O angielskim MSDN i linkach w ang Wikipedii wiem doskonale, ale fakt nie wymieniłem ich w swoim pierwszym poście. Co do LINQ to jakoś przekonywująco się nie wypowiedziałeś (poza stwierdzeniem że 'ja wole') :slight_smile:

Zgadza się, w swojej bazie SQL mam:

  • utworzone tabele (create)

  • wstawione dane do tych tabel (insert)

  • proste zapytania (select)

  • procedury (proc)

  • wyzwalacze (trigger)

  • reguły (rule)

  • kursory (cursor)

Chciałbym móc później tym operować z poziomu aplikacji i np. już w samym programie dodawać do bazy nowe dane do poszczególnych pozycji. Tych procedur, wyzwalaczy etc. nie mam zbyt dużo, zaledwie kilka, więc nie wiem czy po prostu w SQL mam napisać ich więcej, wszystkie jakie będę potrzebował, czy tak jak piszesz w 2 części swojego postu: "jeśli (...) nie potrzebujesz wydajnego rozwiązania__, to szybciej i wygodniej będzie wykonać ORM przy użyciu LINQ to SQL". W takim razie co zalecasz, czy użycie ADO.NET, gdy posiadam już conieco napisanych procedur, czy przejście na LINQ? :wink: i co ma oznaczać "wydajnego rozwiązania", oraz czy ADO.NET ma tu znaczącą przewagę? Czekam na dalsze info.


(somekind) #5

Procedury składowane posiadają wiele zalet:

• Ponieważ wywołuje się je za pomocą krótkich nazw, a nie długich zapytań ich użycie zmniejsza obciążenie sieci.

• Są optymalizowane i kompilowane na serwerze, zapewniając większą wydajność i krótszy czas wykonania.

• Ponieważ ukrywają skomplikowane operacje hermetyzują procesy - z zewnątrz nie widać budowy bazy danych.

• Mogą być wywoływane z innych procedur, dzięki czemu zapewniają modularność programowania i nadają się do ponownego użycia.

• Większe bezpieczeństwo i zabezpieczenie przed SQL-Injection, dzięki przekazywaniu danych przez parametry a nie polecenia.

Ich największą wadą jest to, że trzeba je napisać :wink:

Zysk na wydajności kosztem pracy, nic nowego.

I nie wiem, czy chcesz używać procedur, sam sobie odpowiedz :slight_smile:

LINQ to SQL także pozwala na korzystanie z procedur, tylko to trochę bez sensu moim zdaniem. Przy jego użyciu zrobić sobie w swojej aplikacji klasy odpowiadające tabelom z bazy metodą przeciągnij i upuść. Błyskawicznie dostaniesz zestaw klas, które same będą umiały się zapisać, usunąć i modyfikować w bazie, itd. Idealne rozwiązanie dla małej i prostej aplikacji, którą trzeba zrobić szybko.

Korzystając z ADO.NET musiałbyś napisać te klasy ręcznie, co zajęłoby Ci więcej czasu. Ale miałbyś wtedy pełniejszą kontrolę nad kodem i wszystkimi procesami. Ale dla systemów, które wymagają wydajności ADO.NET jest chyba najlepszym rozwiązaniem spośród tego co .NET oferuje.

LINQ to SQL to rozwiązanie automagiczne. Zazwyczaj, gdy w programowaniu pojawia się jakaś magia, to dzieje się to kosztem wydajności. Nie mam teraz pod ręką LINQów, ale sam możesz poszukać w necie porównania wydajności standardowego ADO z LINQ i nie będą one raczej na korzyść drugiego, przynajmniej na razie.


(Ufolec) #6

Ok, w takim razie ADO.Net wygrywa pojedynek w tym temacie i to nim się bardziej zajmę, tak jak już od początku planowałem :wink: choć pewne wahania mam gdyż za LINQ stoi zasada "po co sobie utrudniać, zrób tak byle działało", to ADO.Net będzie lepsze gdy baza danych w programiku już się nieco rozrośnie :slight_smile: tym bardziej że SQLa już mniej-więcej znam i te dodatkowe procedury, których z pewnością będzie brakować są jako tako do napisania : ]

Mam też zapytanie teraz z nieco innej beczki, ale wciąż dotyczące tejże aplikacji bazodanowej. Otóż gdybym chciał bazę danych umieścić w Internecie na jakimś serwerze , to czy jest to dużym kłopotem i czy jest trudne w zaprogramowaniu by móc później z poziomu aplikacji aktualizować taką bazę danych jako administrator programu/bazy, a każdy zwykły użytkownik takiej aplikacji (powiedzmy że aplikacja będzie ogólnie dostępna do pobrania) będzie miał ją na bieżąco aktualną przy uruchomieniu programu?

Wiem że mam dalekosiężne plany, bo póki co nie zrobiłem jeszcze nawet wbudowania tej bazy do aplikacji, ale jeśli już to właśnie wolałbym by mój program łączył się z bazą zewnętrzną, a nie na localhoscie, czy z pliku dołączonego do programu*, gdyż zależy mi na wciąż aktualnej bazie bez potrzeby ściągania całej aplikacji na nowo, tylko sama baza. W jaki sposób może to wyglądać? Program będzie pobierał całą tą bazę na dysk użytkownika i w razie zapytania o nową wersję będzie ją na nowo ściągał i nadpisywał, czy też będzie obsługiwał ją "na bieżąco" z serwera w Internecie? W sumie pierwsze rozwiązanie byłoby imho lepsze ze względu na to że user tej aplikacji mógłby ją uruchamiać nawet w trybie offline.

W tym przypadku pojawia się problem - jak w aplikacjach C# obsługiwać połączenia internetowe, nigdy wcześniej nie robiłem czegoś w stylu "sprawdź aktualną wersję programu" :slight_smile:

dzięki za wszelkie rady i pomoc przy moim programiku :wink:


(somekind) #7

A ile ta baza ma tabel? Jak dużych? Ilu użytkowników będzie z niej korzystało? Ile mniej więcej danych będzie przybywało codziennie?

Bo może jednak nie warto sobie dokładać roboty, przynajmniej na początku. Ja bym raczej użył LINQ (chociażby po to, żeby działało), a potem ewentualnie tworzył procedury, żeby było szybciej i ładniej.

Aha, jeszcze coś. M$ ma w swojej ofercie także konkurencję dla LINQ: http://msdn.microsoft.com/en-us/library/aa697427(VS.80).aspx

Jak rozumiem, to chcesz używać MS SQL Server... To kosztuje, chociaż podobno można gdzieś znaleźć darmowe hostingi.

Coś mi mówi, że baza będzie jednak większa niż aplikacja. Dlatego często lepiej ściągać tylko zmienione dane, nie całą bazę.

Można i tak i tak, to już jak wolisz. Przecież na komputerze lokalnym możesz w ogóle nie mieć bazy danych, pracować tylko zdalnie. Jeśli koniecznie chcesz mieć możliwość pracy offline, to musisz mieć kopię na dysku. Tylko takie rozwiązanie się rzadko stosuje i raczej tylko do niektórych danych, np. takich, które się rzadko zmieniają, jak struktura administracyjna państwa czy lista imion żeńskich :slight_smile:

Użyć Google albo MSDN. Albo poczytać w jakiejś książce/tutorialu. Generalnie klasa WebClient i parę linijek kodu.


(Ufolec) #8

Ilość tabel oraz złożoność bazy danych: stosunkowo mała. Wstępnie baza zawiera 4 lub 5 tabel z danymi (w przyszłości dojdzie ich może kilka, ale w sumie chyba nie przekroczy liczby 10 tabel). Tabele te zawierają średnio po 6-8 kolumn, największa ma ich 11.

Ilość użytkowników programu: będzie rosła wraz z zainteresowaniem i rozpowszechnianiem się programu, początkowo będzie z pewnością bardzo mała do około 50 osób, później nie wiadomo jak się program przyjmie :slight_smile:

Ilość danych których będzie przybywać z dnia na dzień: początkowo będzie bardzo duża (z mojej strony), z czasem może także ich przybywać przy zgłaszaniu przez resztę użytkowników, a po dłuższym już czasie ich częstotliwość zmaleje. Dodam tu także że będą mogły pojawiać się aktualizacje co do zawartości tych danych, choć nie powinno być ich wiele. W tym przypadku bardziej liczyć się bedzie rozrost bazy niż częsta aktualizacja danych już wprowadzonych. Zakładam, że ilość danych (pozycji) przy początkowych fazach programu będzie równa kilkadziesiąt-kilkaset, później mogą to już być tysiące :wink: W planach miałem także do (docelowo) każdej pozycji w bazie dodać plik graficzny (jpg/png) 200x200px, ale już wiem że będzie to w pierwszej fazie z pewnością niewykonalne, dlatego mnóstwo pozycji nie będzie zawierało żadnej grafiki, a jej miejsce w interfejsie będzie zajmował obrazek "brak grafiki" :wink:

Tak, zdaję sobie sprawę z tego że będzie potrzebny płatny hosting by móc używać zdalnie bazy (bez wyświetlania zawartości strony i ewentualnych reklam), na to jestem gotów, bo jak widziałem ofertę webd.pl nie wychodzi to drogo, a i miejsce na stronę www się z pewnością przyda. Rozumiem że MS SQL Server nie będzie tu problemem? :slight_smile: Zapewne nie jest tak samo wspierany przez hostingi jak MySQL, ale mam nadzieję że jakoś się uda odnaleźć odpowiedni hosting który obsłuży także MS SQL Server.

Powiedz mi mniej więcej ile miejsca dyskowego mogłaby zabierać taka baza danych którą opisałem przy pierwszym cytacie w tym poscie (tak na oko - kilkaset pozycji po max 10 pól każda)? Wiadomo, że lepiej jak będą pobierane jedynie zmienione dane, ale czy będzie to równie łatwe i gdzie szukać opisu/pomocy jak to zrobić :slight_smile:

Zdecydowanie chciałbym by istniała także możliwość pracy offline, użytkownik mógłby wówczas przeglądać bazę (niekoniecznie aktualną, ale jednak miałby do niej wgląd), a admin załóżmy że by mógł tą bazę aktualizować lokalnie na swoim komputerze po czym jednorazowo łączyć się z serwerem by ją zaktualizować (o brakujące dane), czy też podmienić, co uważam że jest chyba prostsze :stuck_out_tongue:

Edit: Aha, zapomniałem dodać do tego ostatniego cytatu, że dane będą się co prawda rzadko zmieniać, ale nie mogę założyć że aż tak rzadko jak "lista imion żeńskich" :slight_smile: dlatego nie można zbytnio tego aż tak wykluczyć.


(somekind) #9

Nie rozumiem związku między Twoją aplikacją i Twoją bazą danych a stronami i reklamami na nich...

Ja nie widzę u nich w ofercie SQL Servera.

Z pomocą Google pewno tak. Windows Server kosztuje, SQL Server kosztuje, więc takie hostingi są droższe od tych bazujących na darmowych rozwiązaniach. Nieraz dużo droższe.

Nie znam typów danych, jakie mają kolumny. Sam oszacuj, najpierw oblicz ile zajmuje jeden rekord w tabeli (zsumuj rozmiary typów danych dla poszczególnych kolumn), następnie ile cała tabela (pomnóż liczbę wierszy razy rozmiar rekordu :stuck_out_tongue_winking_eye:). Do tego jakiś narzut bazy na inne informacje.

Owszem, prostsze.

A ta baza na lokalnym komputerze użytkownika, to jaka będzie? Też SQL Server? Jakaś wersja płatna, Express czy może malutki CE? A może SQLLite? Albo pliki XML?

Wybór SZBD jest raczej kluczowy w Twoim projekcie, więc przemyśl go dobrze na początku. Zarówno tego na serwerze zdalnym, jak i lokalnym. Przecież to mogą być zupełnie inne sposoby przechowywania danych, a wymieniał będziesz jedynie dane między nimi. Podmiana plików baz to dziwne rozwiązanie.


(Ufolec) #10

Chodziło tu raczej o to, że darmowe hostingi jakby narzucają to by wyświetlać ich reklamy, które są dołączane do plików html/php a gdybym miał miec u nich jedynie bazę do której odnosiłbym się z poziomu aplikacji unikałbym tych reklam, dlatego praktyka ta nie jest dozwolona w wiekszosci, dlatego tez potrzebny jest płatny hosting.

&

Fakt, webd.pl ma tylko MySQL, pomyślę jeszcze nad przepisaniem swojej bazy danych w MS SQL Server na MySQL'ową.. bo to dużo bardziej ułatwi mi późniejsze kroki do tego by bazę osadzić na płatnym serwerze.. ze względu właśnie na te koszta, niektórych rzeczy nie przeskoczymy M$ każe sobie słono płacić za swoje rozwiązania a i MySQL jest popularniejszy w tanich hostingach.. :wink:

.. Podsumowując: mam totalny mętlik w głowie.. miało być PROSTO, po prosto mam program w C#, mam baze w SQL Server i chce połączyć w całość, problem miał być jedynie nad wyborem czy ADO.net czy LINQ +do tego zrozumiały poradnik, a po drodze niestety wynikły inne zawiłości i problemy przez co faktycznie zastanawiam się nad zmianą SZBD... chyba najlepiej będzie jak przepiszę wszystko na MySQL, jak już wyżej napisałem... (nie wiem ile w tym będzie kłopotu bo za MySQL się jeszcze nie brałem, ale chyba nieznacznie różni się od SQL Server, co? :-P). Moja dotychczasowa baza była przy użyciu SQL Server Express + Management Studio Express (choć uczelnia daje mi możliwość korzystania z wersji komercyjnych, tak jak i Visual Studio). Dotychczasowe doświadczenie z aplikacjami bazodanowymi mam jedynie takie, że rok temu robiłem pro gram w C# z użyciem plików CSV (Comma Separated Values) jako swoistą bazę danych na plikach.. Tutaj przy nowym projekcie chciałbym mieć bazę danych z prawdziwego zdarzenia, czyli z zastosowaniem SQL. Także wybór SZBD się nieco zawęża..

Chyba poszukam póki co poradnika jak szybko z kodu w SQL Server zrobić MySQL, a następnie mając już porządną podstawę swojej aplikacji na przyszłość (z pewnością MySQL mi to zapewni bardziej niż SQL Server, który jest płatny i rzadziej spotykany w hostingach) zdecyduję się chyba na ADO.net, bo ten link jak już Fiołek wyżej napisał dość znośnie opisuje cały przebieg w ADO.net.... :wink:


(Pkolaczk) #11

Nie napisałeś najważniejszej rzeczy - ile tam będziesz trzymał danych w tej bazie. Bo akurat liczba kolumn i tabel nie ma znaczenia dla wydajności, natomiast liczba rekordów ma bardzo duże. Druga rzecz - jak złożone operacje będziesz wykonywał na tych danych. Czy będą to proste SELECT x FROM jedna_tabela WHERE costam AND costam, czy może zapytania w stylu TPC-H (poniżej przykład):

# TPC-H Q20:

select

	s_name,

	s_address

from

	supplier,

	nation

where

	s_suppkey in (

		select

			ps_suppkey

		from

			partsupp

		where

			ps_partkey in (

				select

					p_partkey

				from

					part

				where

					p_name like 'yellow%'

			)

			and ps_availqty > (

				select

					0.5 * sum(l_quantity)

				from

					lineitem

				where

					l_partkey = ps_partkey

					and l_suppkey = ps_suppkey

					and l_shipdate >= date '1995-10-14'

					and l_shipdate < date '1995-10-14' + interval '1' year

			)

	)

	and s_nationkey = n_nationkey

	and n_name = 'POLAND'

order by

	s_name;

Jeśli danych będzie więcej niż kilka tys. rekordów, a zapytania złożone, to od razu możesz skreślić MySQL z listy. Już lepiej poradzi sobie PostgreSQL (choć z podzapytaniami to i tak będzie masakra). MSSQL pod względem wydajności był IMHO bardzo dobrym wyborem - no tylko pozostaje kwestia ceny. Pamiętaj, że na niego trzeba mieć licencje, a wersje darmowe mają ograniczenia. No i hostingu taniego nie uświadczysz.

W kwestii odpowiedzi na oryginalne pytanie: jeśli SZBD i apikacja chodzą na jednym kompie lub osobnych ale połączonych szybkim łączem (np. gigabit ethernet), to LINQ jest b. dobry. Procedury składowane w kwestii wydajności są przereklamowane (dotyczy to też prepared statements)- mają jedną bardzo poważną wadę w porównaniu z zapytaniami ad-hoc - są kompilowane i optymalizowane tylko raz, bez uwzględnienia aktualnych wartości parametrów. Przy obecnej szybkości procków i względnej powolności dysków dużo lepiej jak silnik optymalizuje każde zapytanie z osobna, gdy ma je w całości. Czas parsowania i optymalizacji jest znikomy przy czasie wykonania.


(Ufolec) #12

Informację tą podałem przy dyskusji z somekind'em, dokładniej to przy "Ilość danych których będzie przybywać z dnia na dzień:"

Chodziło tu rzecz jasna o ilość rekordów, czyli jakby ilość wierszy w tabeli, które będą zawierać po maksymalnie 10 pól je charakteryzujących. Czyli początkowa faza to kilkaset rekordów, późniejsze fazy - tysiąc, dwa, trzy.. itd. (zakładam że dość późno do tego dojdzie i już powyżej 1 tysiąca częstotliwość dodawania nowych rekordów będzie naprawdę znikoma) :wink:

Póki co są to raczej proste zapytania i w najbliższym czasie nie zamierzam zbytnio ich rozbudowywać tak jak np. Twój przykład zapytania w stylu TPC-H.

Rekordów nie wykluczam że faktycznie może być więcej niż kilka tysięcy, co do zapytań - tak jak napisałem nie są one zbyt złożone. No i co teraz..? Nadal sugerujesz PostgreSQL? Co prawda hosting o którym już pisałem (webd.pl) wspiera bazy PostgreSQL ("bazy PostgreSQL dostępne opcjonalnie dla kont Mini, Medium, Large; dla kont Extra i Extra Pro dostępna w standardzie (na życzenie).") więc może od razu pominąć MySQL i zabrać się za PostgreSQL? Nie wiem.. :? MS SQL raczej odpada na dłuższą metę gdyż docelowo program ma być na licencji freeware (no lub ewentualnie beerware \:D/ ), także do całego interesu nie chciałbym za dużo dokładać, serwer pod bazę MySQL jestem w stanie opłacić, ale gdy przyjdzie mi jeszcze płacić za rozwiązania M$ przy miejmy nadzieję znikomych różnicach wydajnościowych przy takiej bazie jak moja - to ja podziękuję, tym bardziej że póki co to mogę korzystać z licencji uczelnianej na SQL Server (nawet nie sprawdzam czy zezwala ona na używanie go przy projektach spoza uczelni i zastosowaniu go w takim przypadku jak mój, no a nawet jeśli to co wtedy, gdy z uczelni już wyjdę, licencja się skończy hehe :slight_smile: )..


(Pkolaczk) #13

W takim razie MySQL pociągnie bez problemu. Oczywiście jeśli chcesz rozpowszechniać program, to musisz udostępnić kod źródłowy na GPL (albo kupić licencję własnościową na MySQL). W przypadku PostgreSQL tego wymagania nie ma, bo jest na licencji BSD - możesz sprzedawać i rozdawać jak chcesz. PostgreSQL ma też kilka fajnych zalet w porównaniu z MySQL np. dobrą obsługę transakcji. Wydajność w prostych zastosowaniach jest zbliżona.


(Ufolec) #14

W sensie że cały kod programu będę musiał udostępnić do swobodnego wglądu każdego z użytkowników? :stuck_out_tongue: czy tylko kod bazy w MySQL :wink:

Coraz bardziej przekonuję się do tego rozwiązania i chyba nie ma się co dłużej zastanawiać, po weekendzie zabieram się za ten system zarządzania bazą danych :slight_smile: w międzyczasie przejrzę też info o tym mniej mi znanym rozwiązaniu :stuck_out_tongue: wikipedia nie wystarcza, chce sprawdzić kompatybilność tego rozwiązania właśnie z ADO.net, etc.


(somekind) #15

Pewno nazwy niektórych typów danych, funkcji, może gdzieś znak ` zamiast ' albo " zamiast '. Ale nic niewykonalnego :slight_smile:

A jeśli chodzi o połączenie jej z programem w .NET, to przyda Ci się to: http://dev.mysql.com/downloads/connector/net/6.1.html

Zaś w przypadku bazy PostgreSQL to: http://npgsql.projects.postgresql.org/

Dwa razy nie.

Nie możesz używać oprogramowania na licencji MSDN AA w celach innych niż naukowe, bez względu na to czy byłyby komercyjne czy nie.

I licencja nie kończy się po zakończeniu studiów, po prostu nie możesz instalować aplikacji na nowo i nie masz prawa do ich aktualizacji.

To w końcu wiesz w jakiej bazie będzie trzymał dane użytkownik lokalnie? Serio pytam, bo nie każdemu może chcieć się specjalnie instalować serwer, tylko po to, aby korzystać z jednego programu, na dodatek nie zawsze ma to sens.


(Pkolaczk) #16

Cały TWÓJ kod.

Kod bazy i tak jest udostępniony, więc go akurat nie musisz udostępniać, jeśli nic nie przerobiłeś.

A co do trzymania danych lokalnie w Javie jest jeszcze coś takiego jak HSQLDB i H2. Są to SZBD napisane w czystej Javie z możliwością zarówno pracy jako wieloużytkownikowy serwer (H2), albo jako baza wbudowana w aplikację (H2, HSQLDB). W przypadku gdybyś miał aplikację napisaną w Javie, to takie rozwiązanie jest wydajniejsze niż łączenie się z inną bazą danych, a dodatkowo bazę można przenosić między różnymi platformami bez ryzyka, że się coś zwali (z MySQLem czy Postgresem tak się nie da). Dla .NET z tego co się zdążyłem zorientować dobrym odpowiednikiem powinien być MSSQL-Express, z tą różnicą, że ma pewne ograniczenia na wielkość bazy danych (chyba do 2GB) i jest przywiązany do Windows (btw. licencję na Windows masz, czy też z MSDN-AA?)


(Ufolec) #17

@somekind - thx za linki :slight_smile:

A jeżeli ten projekt zostanie podpięty jako projekt uczelniany, wówczas licencja na MS SQL Server obowiązuje w tym programie nawet po zakończeniu studiów, pod warunkiem że nie będę już w nim nic zmieniał (czy chodzi tylko o samą aktualizację oprogramowania w którym miałem daniej napisaną aplikację?), a i sam projekt nie będzie w pełni moją własnością (uczelnia z tego co wiem też będzie miała do niego prawa)..? Pytam tylko z ciekawości, bo już prawie ustalone że jak na moją mało skomplikowaną bazę, to lepiej przerzucić się na darmowe rozwiązania (MySQL lub PostgreSQL). Z resztą póki co to i tak korzystałem z wersji Express, bo mi po prostu wystarczyła z użyciem Management Studio do napisania tej bazy.. :wink:

Zaraz, zaraz, zapomniałem o tym fakcie, że aby móc korzystać z bazy danych w programie (jakimkolwiek chyba gdzie ona występuje) to trzeba zainstalować ją tak jak mówisz na każdym komputerze gdzie program będzie używany, odbywa się to podobnie jak przy .NET Framework , tak? ((by móc odpalić program pod niego napisany, w tym przypadku napisany w C# :slight_smile: )) Czyli sugerujesz aby wybrać popularniejszy SZBD (MySQL?) by użytkownik nie musiał dodatkowo specjalnie do mojej aplikacji doinstalowywać dodatkowego egzotycznego serwera podczas gdy wcześniej uzyskał ten popularniejszy w jakiejś innej aplikacji?

Spytam jeszcze, a jak to jest rozwiązane w innych programach, tych z wyższej półki, one też z pewnością korzystają z baz danych czy to MySQL czy też PostgreSQL, a nie przypominam sobie abym musiał wcześniej doinstalowywać serwer by program mógł poprawnie działać..


@JCoder - dzięki za info o rozwiązaniu zaproponowanemu w Javie, ale nie będę już w tą stronę kombinował, bynajmniej nie na takim etapie, gdy aplikację mam już w C# napisaną, w którym bądź co bądź czuję się lepiej niż w Javie :slight_smile:

Hmm... powiadasz do 2GB baza danych.. a to by mi nawet odpowiadało powiem Ci, nawet jest ok choć dokładnie nie policzyłem jeszcze ile będzie zajmować u mnie 1000 rekordów w bazie, to myślę że 2GB w tym przypadku powinno wystarczyć. Jakieś jeszcze ograniczenia ma ta wersja Express, które mogłyby mi przeszkodzić gdybym zdecydował się na wersję lokalną bazy (a nie taką w połączeniu z bazą umieszczoną w Internecie na serwerze)?

Póki co -> Windows 7 Ultimate RC1, który jest ważny do mniej więcej marca 2010, ale w najbliższym czasie zamierzam przejść na wersję Windows 7 Professional właśnie z MSDN-AA. Że tak spytam, ma to jakieś duże znaczenie czy pisząc jakiś program mam lub nie mam własnej licencji na system w którym piszę? :wink:


(Fiołek) #18

Do tak małej aplikacji nie używa się tak dużych baz danych(lokalnych). Najlepsze do przechowywania danych lokalnie będzie Embedded MySQL, Embedded MSSQL itp. lub SQLite dla .NET.

Nie licz na to, żeby użytkownik miał zainstalowany jakiś silnik baz danych - mało która aplikacja ich używa lokalnie, większość magazynuje dane w bazie na jakimś serwerze. Jedyną aplikacją instalującą SZBD to Subiekt GT(SQL Server 2003) ale też tylko w wersji jedno komputerowej(ma podział na wersje serwerową i kliencką).


(somekind) #19

Jeszcze raz :confused:

Wszystkie programy, które masz na licencji MSDN AA są do wykorzystania przez Ciebie w celach wyłącznie naukowych. Po zakończeniu studiów nie musisz usuwać ich z dysku, możesz korzystać dalej, ale nie możesz reinstalować, masz też ograniczone możliwości aktualizacji.

A co do programu, który np. napiszesz sobie w trakcie trwania studiów przy użyciu narzędzi z MSDN AA, to będziesz mógł go rozwijać po studiach w nich nadal, pod warunkiem, że nie będzie to produkt komercyjny.

Pewno tak, w końcu prawa do pracy dyplomowej także zabierają, więc do oficjalnie uczelnianego projektu tym bardziej.

Jeśli Twój program ma posiadać bazę na komputerze lokalnym, która wymaga zainstalowanego serwera bazy danych, to użytkownik będzie musiał go mieć zainstalowanego. Pytanie, czy będzie chciał, czy będzie umiał, itd. itp. Myślę, że mało kto ma zainstalowany jakikolwiek SZBD.

Jakich programach?

Mi się wydaje, że cała ta Twoja baza to będzie parę MB, które będzie można spokojnie obsłużyć przez SQLLite albo SQL Server CE i inne tego typu SZBD, które do działania wymagają paru dllek dołączonych do programu, a nie instalacji całego serwera.

Obsługa maksymalnie jednego rdzenia, 1 GB pamięci operacyjnej i bazy danych 4GB. Więcej znajdź sobie w Google.

Takie samo znaczenie - na systemie z MSDN AA możesz tylko uczyć się i robić projekty naukowe.


(Ufolec) #20

Okej, Fiołek oraz somekind - przeczytałem wasze posty i tym razem bez konkretnego cytowania zapodam tutaj wnioski jakie powstały od momentu napisania tego tematu:

  • program będzie na licencji freeware

  • program nie będzie pisany przy użyciu oprogramowania z MSDN AA (Wystarczy że będę pisał go albo na Win7 RC1 do marca, albo na Viście na którą posiadam licencję, przy ewentualnym użyciu darmowych wersji produktów takich jak Visual Studio lub SQL Server)

  • system zarządzania bazą danych będzie nieodpłatny, także komercyjne rozwiązanie M$ odpada

  • program będzie posiadał lokalną bazę danych (dołączoną do aplikacji), ale przy połączeniu internetowym będzie mógł łączyć się z bazą danych dostępną na serwerze by zaktualizować tą bazę lokalną do wersji najnowszej

  • ze względu na to że darmowe jak i tanie hostingi internetowe nie oferują dla klienta baz danych M$, a jedynie MySQL i PostgreSQL to rozwiązanie SQL Server odpada (teraz trzeba zdecydować czy wybrać MySQL czy PostgreSQL w przypadku bazy na serwerze internetowym)

  • lokalną bazą danych nie może być ani MySQL ani PostgreSQL, ze względu na to, że użytkownik musiałby dodatkowo doinstalowywać silnik takiej bazy w swoim systemie i - jak napisał Fiołek - "Do tak małej aplikacji nie używa się tak dużych baz danych (lokalnych)"

  • lokalną bazą danych może być natomiast SQLite dla platformy .NET (lub podobne rozwiązania), które - jak napisał somekind - "do działania wymagają paru dllek dołączonych do programu, a nie instalacji całego serwera"

Sprawdźcie ich merytoryczność i poprawność, czy wszystko co napisałem się zgadza, czy istnieje taka możliwość aby w aplikacji był SQLite, a na serwerze np. MySQL i te dwa SZBD miały swobodną wymianę danych między sobą przy połączeniu internetowym? Całość nie powinna się ze sobą kłócić.. :slight_smile: