Program tworzący bazę danych na starcie

0

Cześć,
Chciałbym zapytać jakie praktyki stosuje się (te najlepsze) w tworzeniu programów, które same sobie tworzą bazę danych?
Tzn. Pisze program, który będzie działa z bazą danych sql server w C# .NET4.

Chciałbym aby przy pierwszym uruchomieniu pojawiło się okno, które przeszuka dysk w poszukiwaniu SQL Server 2008, jeżeli nie znajdzie to napisze komunikat, natomiast jeżeli znajdzie, poprosi użytkownika aby stworzył bazę danych bo jest niezbędna do działania programu. Użytkownik jedynie napisze nazwę bazy, ew. jakieś info konfiguracyjne. Program sam połączy się SQL serverem, utworzy tam konkretną bazę z tablicami (wykonam skrypty) i tyle.

W jaki sposób to zrobić aby było możliwie najbardziej elastycznie, bezpiecznie.. z góry dzięki za pomoc.

0

Wyszukiwarka folderów/plików, żeby znaleźć folder z Microsoft SQL Server 2008 - z System.IO . Tworzenie bazy, to już kwestia tego, co w niej będzie i jaką ma mieć strukturę wewnętrzną. Możesz zastosować Linq, możesz w tradycyjny sposób (zastosowanie np. parametrów, żeby się ochronić przed zastrzykami SQL).

0
now77ak napisał(a)

Chciałbym aby przy pierwszym uruchomieniu pojawiło się okno, które przeszuka dysk w poszukiwaniu SQL Server 2008, jeżeli nie znajdzie to napisze komunikat, natomiast jeżeli znajdzie, poprosi użytkownika aby stworzył bazę danych bo jest niezbędna do działania programu. Użytkownik jedynie napisze nazwę bazy, ew. jakieś info konfiguracyjne. Program sam połączy się SQL serverem, utworzy tam konkretną bazę z tablicami (wykonam skrypty) i tyle.

Jakie znaczenie ma to, czy znajdziesz SQL Server na dysku, jeśli nie będzie podniesionej usługi? Sprawdzenie istnienia serwera SQL lepiej sprawdzić łącząc się z nim, a nie przeszukując wszystkie partycje w poszukiwaniu jego plików.
Chcesz używać SQL Server w pełnej wersji czy Express?

0

Właśnie chodzi o to aby program był elastyczny - dlatego Express też byłoby dobrze.

Co do szukania.. to nie chodziło mi o przeszukiwanie dysku w poszukiwaniu foldera o jakiejś nazwie. Właśnie chodzi o usługę. Aby serwer działał.

Myślałem bardziej, że zaproponujecie mi jakąś bibliotekę .NET..

0

Bez namiarów na serwer nie da się z nim połączyć - mam nadzieję że to nie jest nic odkrywczego :)
Możesz użyć polecenia (programu w konsoli) osql -L
Tu masz przykład z użyciem odbc32.dll http://www.codeproject.com/KB/database/LocatingSql.aspx
Tu masz inny przykład http://www.codeproject.com/KB/database/locate_sql_servers.aspx tylko port serwera może być zmieniony
Po znalezieniu serwera musisz się z nim połączyć, ale żeby to zrobić musisz znać user/pass lub wiedzieć że autentykacja windows jest włączona. Następnie zakładasz bazę oraz całą strukturę za pomocą poleceń sql.

0

A czy takie (http://www.codeproject.com/KB/tips/CreateSQLDV.aspx) rozwiązanie jest godne polecenia ?

0

Tylko to bazuje na dll, które dostępne są po zainstalowaniu MS SQL Server'a
A czy jako założenie masz że serwer bazy danych musisz mieć na maszynie lokalnej względem instalowanej aplikacji? Jeśli tak to ok, jeśli nie może być kłopot, bo wtedy w GAC (nie wiem czy ta dll jest w nim na pewno) nie znajdziesz referencji do biblioteki i program stanie.

0

Hmm.. to mam dwa pytania:
Zakładając, że serwer musi być lokalnie: Mogę wyciągnąć teraz te dllki i dołączyć je do folderu instalacyjnego? (Z tego katalogu C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies)

Zakładając że serwer może być gdzieś w sieci lokalnej (ale nie na tym samym komputerze), znając jego adres ip: Mogę jej użyć?

W katalogu instalacyjnym będę mial potrzebne dllki. Wg projektu (dla SqlServer 2005) potrzebne są:
Microsoft.SqlServer.ConnectionInfo.dll
Microsoft.SqlServer.Smo.dll
Microsoft.SqlServer.SqlEnum.dll
Microsoft.SqlServer.SmoEnum.dll

Więc nie będę potrzebował SQL servera na komputerze na którym działa program. Będzie zatem działać to rozwiązanie dla przypadku serwera w sieci lokalnej ?

0

Wyciągnięcie tych dll ze swojej maszyny i dołączenie do instalatora programu, jest śliskie, jesteś pewien że te dll nie zależą od innych? Mogą być różnice w kompatybilności wersji sql serwera i dll.
Ja raczej postawiłbym na resolving assembly czy jakoś tak, lub umiał wyszukać je na dysku i dynamicznie załadować, bo oczywiście katalog instalacyjny MS sql servera może być inny niż c:\program files...
Jednak użyłbym rozwiązania bardziej niezależnego od tego czy serwer jest na maszynie lokalnej czy nie oraz bez względu na jego wersję. Bo za pomocą ado .net później jednakowo połączysz się z 2005 jaki i 2008, zakładam że twoja aplikacja nie powinna mieć problemu z użyciem dowolnej z tych wersji.

0

To już sam nie wiem. Program będzie napisane w C# (WPF). Ma korzytać z bazy danych sql-server (która będzie gdzieś w lokalnej sieci).
Jak byś mi polecił to zrobić? Jak się robi takie programy... komercyjnie ?:)

Olewa problem w ogóle - i dłącza skrypty sql pozwalające stworzyć bazę danych?
Tworzy okno powitalne, które wykryje jaka jest sytuacja, czy jest sql-server i serwer działa czy nie, ewentualnie się do niego podłączy i utworzy tam obiekty ze skryptów?

0

Ja nie rozumiem ani w czym problem, ani czemu chcesz robić to, co powinien zrobić użytkownik?

Osoba instalująca program wybiera, czy chce się połączyć z istniejącym serwerem, jeśli tak, to podaje jego dane, czy zainstalować serwer, który dostarczasz na płytce (albo jest dociągany na żądanie z netu). Wtedy masz już pewność, że serwer jest, więc bez problemu zakładasz bazę, tworzysz w niej tabele i robisz co chcesz.

0

A może skorzystać z biblioteki smo
http://msdn.microsoft.com/en-us/library/ms162557.aspx
dzięki tej bibliotece idzie ogarnąć wszystkie istniejace instancje serwera, nawet jeśli zna się poświadczenia do serwera to wyświetlimy zainstalowane bazy danych.
Kiedyś z tego korzystalem i fajnie śmiga, mam gdzieś kod w VB2008 tylko musze poszukać

0

http://msdn.microsoft.com/en-us/library/ms162189.aspx
Pod warunkiem że masz zainstalowane. Więc żeby tego użyć na dowolnym komputerze trzeba przewidzieć ewentualną instalację Client Tools SDK.

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