Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[c#] Dynamiczne tworzenie pliku bazy danych

Rafal.J.645 09 Maj 2012 22:48 6502 27
  • #1 09 Maj 2012 22:48
    Rafal.J.645
    Poziom 11  

    Witam.

    Kończę pisać program z bazą SQL w C#. Program wygląda tak, że po uruchomieniu
    trzeba określić plik bazy poprzez OpenFileDialog.
    C# stworzył taki plik i jest on w folderze z projektem, ale ja bym chciał
    taki plik tworzyć dynamicznie, czyli np. przerzucam program na inny komputer
    (bez pliku bazy) i tam klikam przycisk żeby stworzyć nowy pusty plik bazy
    (z tabelami, ale nie uzupełnionymi).
    Typ pliku jaki chcę stworzyć to: "SQL Server Database Primary Data File (.mdf)".

    Mógłby mi ktoś powiedzieć jak to zrobić?

    Pozdrawiam.

    0 27
  • #2 09 Maj 2012 23:40
    marcinj12
    Poziom 40  

    Wiesz oczywiście, że pliki .mdf jest plikiem "pełnej" wersji SQL Servera i jako taki wymaga zainstalowanej i działającej instancji SQL Servera na komputerze docelowym?
    W odróżnieniu od pliku lokalnej bazy .sdf, który jest plikiem SQL Servera Compact Edition, nie wymagającej do działania instancji SQL Servera?

    1
  • #3 10 Maj 2012 08:13
    markonedj
    Poziom 22  

    Jeśli korzystasz z SQL Server 2005/2008 to musisz się zaopatrzyć w narzędzie służące zarządzaniu serwerem: SQL Server Managament Studio w wersji adekwatnej do wersji silnika bazodanowego (2005/2008). To narzędzie jest zarówno dla wersji płatnych jak i darmowej Express.

    Następnie za pomocą tego narzędzia podłączasz się do bazy danych i z lewej strony masz Object Explorer. Tam wyszukujesz swoją bazę danych klikasz na niej prawym przyciskiem, z rozwijanego menu wybierasz Tasks -> Generate Scripts, jak niżej:

    [c#] Dynamiczne tworzenie pliku bazy danych

    No i w kreatorze który się pojawi możesz wybrać zeskryptowanie całej bazy danych wraz z jej obiektami (Script entire database and all database objects) lub wybrać sobie poszczególne obiekty (Select specific database objects).
    Następnie wskazujesz gdzie zapisać skrypty: w pliku, w webservice itp.).

    Potem skrypt takiej bazy np w pliku *.sql odpalasz w trakcie pierwszego uruchomienia programu i voila schemat bazy jest już na serwerze.
    Pamiętaj żeby przy uruchomieniu programu stworzyć warunek typu:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    Dzięki temu program sprawdzi czy baza istnieje i jeżeli tak to przejdzie do wykonywania głównej pętli programu, zamiast tworzyć od nowa bazę danych przy każdym uruchomieniu.

    0
  • #4 10 Maj 2012 18:00
    Rafal.J.645
    Poziom 11  

    Dzięki za odpowiedzi ;)

    Cytat:
    Następnie za pomocą tego narzędzia podłączasz się do bazy danych i z lewej strony masz Object Explorer. Tam wyszukujesz swoją bazę danych klikasz na niej prawym przyciskiem, z rozwijanego menu wybierasz Tasks -> Generate Scripts, jak niżej:


    No i już na początku mam problem. Włączam program i pojawia się okno "Connect to Server". I co mam zrobić?
    Wyłączyłem to i otworzyłem plik bazy (File ->> Open ->> File...), ale wyskakuje błąd (There is no editor available for 'ścierzka pliku'. Make sure the application for the file type (.mdf) is installed.).
    No i albo coś źle robię, albo czegoś nie zainstalowałem.

    Co tym sądzicie?

    0
  • #5 11 Maj 2012 10:24
    markonedj
    Poziom 22  

    Rafal.J.645 napisał:
    Włączam program i pojawia się okno "Connect to Server". I co mam zrobić?

    Jak to co ? Podłączyć się do serwera ! W jaki sposób chcesz pracować na bazie nie będąc do niej podłączony ?

    0
  • #6 11 Maj 2012 15:40
    Rafal.J.645
    Poziom 11  

    Ok, podłączyłem się do serwera .\SQLEXPRESS i jak teraz otworzyć plik?
    Próbowałem tak jak wyżej pisałem (File ->> Open ->> File...), ale dalej błąd
    wyskakuje. Próbowałem też tak, że PPM na "Databases" w "Object Explorer"
    i z rozwiniętej listy wybrałem "Attach..." a później "Add" i wyskoczył błąd:

    Cytat:
    TITLE: Microsoft SQL Server Management Studio
    ------------------------------

    Failed to retrieve data for this request. (Microsoft.SqlServer.Management.Sdk.Sfc)

    ------------------------------
    ADDITIONAL INFORMATION:

    An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)

    ------------------------------

    D:\BazaPodzespołowElektronicznych.mdf is not a primary database file. (Microsoft SQL Server, Error: 5171)


    Co tym razem robię źle?

    0
  • #7 11 Maj 2012 16:38
    markonedj
    Poziom 22  

    Po zalogowaniu się do serwera w Object Explorer po rozwinięciu folderu Databases powinna już tam być Twoja baza danych, chyba że została utworzona w innej instancji niż domyślna - SQLEXPRESS.

    [c#] Dynamiczne tworzenie pliku bazy danych

    0
  • #8 11 Maj 2012 20:36
    Rafal.J.645
    Poziom 11  

    Niestety bazy nie ma :(. A w zasadzie nie ma żadnej, a kilka już stworzyłem przez Visual Studio.

    Mam coś takiego:

    [c#] Dynamiczne tworzenie pliku bazy danych

    Server podaję chyba dobry (.\SQLEXPRESS), bo w connection string jest coś takiego:

    Cytat:
    Data Source=.\SQLEXPRESS

    0
  • #9 12 Maj 2012 07:29
    markonedj
    Poziom 22  

    No to coś źle robisz. Najlepiej opisz krok po kroku jak tworzysz baze w VS.

    Sprawdź czy w folderze C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA masz swoje bazy danych.

    Wklej też konfigurację Twojego serwera: Wchodzisz w Start -> Wszyskie programy -> i tu w zależności od wersji sql server Microsoft Sql Server 2008 R2 lub samo 2008 -> Configuration Tools -> Sql Server Installation Center.
    Potem w oknie centrum zarządzania wybierasz Tools -> Installed SQL Server features discovery report.

    0
  • #10 12 Maj 2012 10:45
    Rafal.J.645
    Poziom 11  

    markonedj napisał:
    Najlepiej opisz krok po kroku jak tworzysz baze w VS.


    1. Klikam ikonę "Add New Item".
    2. Z listy wybieram "Service-based Database".
    3. Wybieram "Dataset" i klikam "Next"
    4. Klikam "Finish".

    markonedj napisał:
    Sprawdź czy w folderze C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA masz swoje bazy danych.


    Bazy nie było, ale skopiowałem ją i tam wkleiłem (nie wiem czy dobrze zrobiłem?), ale
    dalej się nie wyświetla.

    markonedj napisał:
    Wklej też konfigurację Twojego serwera


    [c#] Dynamiczne tworzenie pliku bazy danych

    0
  • #11 12 Maj 2012 12:19
    markonedj
    Poziom 22  

    To teraz spróbuj się i podłączyć do serwera, kliknąć prawym na folderze Databases w Object Explorer, wybrać Attach i wskazać plik bazy danych. Jak w ten sposób też się nie da to napisz błąd jaki Ci wyskakuje

    0
  • #12 12 Maj 2012 13:54
    Rafal.J.645
    Poziom 11  

    Wyskakuje taki błąd:


    Cytat:

    Failed to retrieve data for this request. (Microsoft.SqlServer.Management.Sdk.Sfc)

    ------------------------------
    ADDITIONAL INFORMATION:

    An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)

    ------------------------------

    C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\BazaPodzespołowElektronicznych.mdf is not a primary database file. (Microsoft SQL Server, Error: 5171)

    0
  • #13 12 Maj 2012 18:37
    markonedj
    Poziom 22  

    Z jakiegoś powodu SQL Server Management Studio nie chce czytać pliku tej bazy. Widocznie bazy tworzone za pomocą VS mają jakieś specyficzne dane w nagłówkach i dlatego Management Studio ich nie rozpoznaje: "is not a primary database file".

    W tej sytuacji widzę dwa wyjścia:
    - zaprojektować (przepisać) bazę w Management Studio
    - użyć jakiś narzędzi zewnętrznych firm http://www.repair-mssql-database.com/, http://www.mssqldatabaserecovery.com/ problem z tymi narzędziami jest taki że są one płatne.

    Osobiście wybrałbym opcję 1.

    Możesz też wrzucić ten plik bazy na serwer elektrody i wkleić linka, to sobie go ściągnę i zobaczę co jest grane.

    0
  • #14 13 Maj 2012 11:03
    Rafal.J.645
    Poziom 11  

    markonedj napisał:
    Osobiście wybrałbym opcję 1.


    I tak zrobię, dużo do przepisywania nie mam.

    markonedj napisał:
    Możesz też wrzucić ten plik bazy na serwer elektrody i wkleić linka, to sobie go ściągnę i zobaczę co jest grane.



    Ok, wrzucam bazę.

    0
  • #15 13 Maj 2012 11:30
    markonedj
    Poziom 22  

    Tak jak pisałem uszkodzony jest nagłówek bazy danych, a konkretnie informacja o jej rozmiarze:

    "The header for file BazaPodzespołowElektronicznych.mdf is not a valid database file header. The FILE_SIZE property is incorrect.

    0
  • #16 14 Maj 2012 18:09
    Rafal.J.645
    Poziom 11  

    Dziękuję bardzo za pomoc, zrobiłem już bazę z jedną tabelą na próbę i teraz próbuję
    stworzyć plik bazy przez mój program w C#.


    markonedj napisał:
    No i w kreatorze który się pojawi możesz wybrać zeskryptowanie całej bazy danych wraz z jej obiektami (Script entire database and all database objects) lub wybrać sobie poszczególne obiekty (Select specific database objects).
    Następnie wskazujesz gdzie zapisać skrypty: w pliku, w webservice itp.).

    Potem skrypt takiej bazy np w pliku *.sql odpalasz w trakcie pierwszego uruchomienia programu i voila schemat bazy jest już na serwerze.
    Pamiętaj żeby przy uruchomieniu programu stworzyć warunek typu:


    Nie jestem pewny, ale nie o to chyba mi chodzi. Z tego co zrozumiałem to w tym wypadku
    muszę na komputer docelowy przenieść mój program i skrypt bazy, odpalić go
    przez program i na serwerze powstanie moja baza, dobrze rozumiem? A gdzie będzie plik bazy, bo przy
    otwieraniu mojego programu za każdym razem trzeba go określić samodzielnie.
    Poza tym wolałbym, żeby na komputer docelowy przenosić tylko plik programu.

    0
  • #17 14 Maj 2012 19:28
    markonedj
    Poziom 22  

    Rafal.J.645 napisał:
    ja bym chciał taki plik tworzyć dynamicznie, czyli np. przerzucam program na inny komputer (bez pliku bazy) i tam klikam przycisk żeby stworzyć nowy pusty plik bazy (z tabelami, ale nie uzupełnionymi)


    Rafal.J.645 napisał:

    Nie jestem pewny, ale nie o to chyba mi chodzi. Z tego co zrozumiałem to w tym wypadku muszę na komputer docelowy przenieść mój program i skrypt bazy odpalić go przez program i na serwerze powstanie moja baza, dobrze rozumiem?


    Dobrze rozumiesz ale sam sobie przeczysz bo na początku pisałeś o przenoszeniu programu a teraz że to nie to, więc określ się kontretnie jak to ma wyglądać.

    Rafal.J.645 napisał:

    A gdzie będzie plik bazy, bo przy otwieraniu mojego programu za każdym razem trzeba go określić samodzielnie.


    W skrypcie określasz ścieżkę do folderu w którym ma być baza. Zwykle to jest domyślny folder SQL Server, czyli: C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\. Nic jednak nie szkodzi na przeszkodzie aby baza była w innym miejscu na dysku, np.

    Kod: sql
    Zaloguj się, aby zobaczyć kod

    Oczywiście konto z którego tworzysz bazę musi mieć uprawnienia dostępu do wskazanego dysku/folderu.

    Rafal.J.645 napisał:

    przy otwieraniu mojego programu za każdym razem trzeba go określić samodzielnie.

    Trochę głupie rozwiązanie. Nie lepiej raz wskazać bazę danych lub utworzyć skryptem przy pierwszym uruchomieniu, zapisać ścieżkę do bazy w pliku konfiguracyjnym aplikacji i przy każdym kolejnym uruchomieniu programu, program będzie sobie odczytywał ścieżkę do bazy z tego pliku konfiguracyjnego ?

    Rafal.J.645 napisał:

    Poza tym wolałbym, żeby na komputer docelowy przenosić tylko plik programu.

    Baza danych musi być umieszczona na jakimś serwerze. Jeśli to jest aplikacja jednostanowiskowa to w tym wypadku serwerem może być komputer na którym będzie zainstalowana aplikacja.
    Jeżeli program ma być wielostanowiskowy to serwer musi stać w jednym miejscu, tak aby był dostępny dla aplikacji w dowolnym momencie.

    0
  • #18 15 Maj 2012 18:29
    Rafal.J.645
    Poziom 11  

    markonedj napisał:
    Dobrze rozumiesz ale sam sobie przeczysz bo na początku pisałeś o przenoszeniu programu a teraz że to nie to, więc określ się kontretnie jak to ma wyglądać.


    Chodzi o to, że piszę program na jakimś komputerze i chciałbym, używać go innych komputerach, na które przeniosę tylko mój program, a z tego co piszesz wynika, że
    będę musiał przenieść też skrypt do tworzenia bazy.

    markonedj napisał:
    W skrypcie określasz ścieżkę do folderu w którym ma być baza. Zwykle to jest domyślny folder SQL Server, czyli: C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\. Nic jednak nie szkodzi na przeszkodzie aby baza była w innym miejscu na dysku, np.



    Ten kod mam umieścić w skrypcie, tak (przed tym co wygenerował SQL Management Studio?

    markonedj napisał:
    Rafal.J.645 napisał:

    przy otwieraniu mojego programu za każdym razem trzeba go określić samodzielnie.

    Trochę głupie rozwiązanie. Nie lepiej raz wskazać bazę danych lub utworzyć skryptem przy pierwszym uruchomieniu, zapisać ścieżkę do bazy w pliku konfiguracyjnym aplikacji i przy każdym kolejnym uruchomieniu programu, program będzie sobie odczytywał ścieżkę do bazy z tego pliku konfiguracyjnego ?


    Nie rozumiem za bardzo o co chodzi z tym plikiem konfiguracyjnym aplikacji, mógłbyś
    wyjaśnić mi gdzie taki plik się umieszcza i jak to dokładnie działa?
    Jedyne co mi przyszło do głowy to to, żeby w kodzie programu wpisać już jakąś ścieżkę
    pliku konfiguracyjnego i na każdym komputerze tam musiałby się on znajdować.

    markonedj napisał:

    Rafal.J.645 napisał:

    Poza tym wolałbym, żeby na komputer docelowy przenosić tylko plik programu.

    Baza danych musi być umieszczona na jakimś serwerze. Jeśli to jest aplikacja jednostanowiskowa to w tym wypadku serwerem może być komputer na którym będzie zainstalowana aplikacja.
    Jeżeli program ma być wielostanowiskowy to serwer musi stać w jednym miejscu, tak aby był dostępny dla aplikacji w dowolnym momencie.



    Aplikacja będzie używana tylko na jednym komputerze. Serwer to chyba ten, na który logowałem się w SQL Management Studio, czyli \.SQLEXPRESS, tak?

    0
  • #19 15 Maj 2012 21:08
    markonedj
    Poziom 22  

    Rafal.J.645 napisał:
    Chodzi o to, że piszę program na jakimś komputerze i chciałbym, używać go innych komputerach, na które przeniosę tylko mój program, a z tego co piszesz wynika, że będę musiał przenieść też skrypt do tworzenia bazy.

    No tak się to z reguły robi. Program wykonuje skrypt przy pierwszym uruchomieniu programu, tworzy bazę w podanej w skrypcie logalizacji (najlepiej umieszczać bazy w domyślnym folderze instancji czyli: C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\.
    Plus tego rozwiązania jest taki że nie musisz myśleć o pliku bazy danych, uprawnieniach dostępu na NTFS itp, bo co będzie jeśli program rzuci wyjątek że nie może czytać z określonego folderu bo nie ma do niego dostępu ?

    Rafal.J.645 napisał:
    markonedj napisał:
    W skrypcie określasz ścieżkę do folderu w którym ma być baza. Zwykle to jest domyślny folder SQL Server, czyli: C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\. Nic jednak nie szkodzi na przeszkodzie aby baza była w innym miejscu na dysku, np.

    Ten kod mam umieścić w skrypcie, tak (przed tym co wygenerował SQL Management Studio?

    Nie rozumiem, np. SSMS wygenerował Ci następujący skrypt:
    Kod: sql
    Zaloguj się, aby zobaczyć kod

    Czyli baza znajdzie się w domyślnym folderze SQL Server, lecz Ty chcesz np. mieć ją na C:\MojProgram\Data\MojaBaza.mdf, więc modyfikujesz atrybut FILENAME w skrypcie tak:
    Kod: sql
    Zaloguj się, aby zobaczyć kod


    Rafal.J.645 napisał:

    Nie rozumiem za bardzo o co chodzi z tym plikiem konfiguracyjnym aplikacji, mógłbyś wyjaśnić mi gdzie taki plik się umieszcza i jak to dokładnie działa?
    Jedyne co mi przyszło do głowy to to, żeby w kodzie programu wpisać już jakąś ścieżkę pliku konfiguracyjnego i na każdym komputerze tam musiałby się on znajdować.

    Tak się nie robi. Co jeśli klient zażyczy sobie zmiany miejsca przechowywania bazy danych ? Będziesz musiał otworzyć projekt aplikacji, zmienić tylko jeden wiersz np. w 30 000 linii kodu (pół biedy jak connection string jest umieszczony w jakiejś globalnej klasie, gorzej jak goni po każdym pliku w projekcie), skompilować program i dostarczyć klientowi. Trochę dużo zachodu jak na zmianę jednego ciągu znaków :-).
    Plik konfiguracyjny w aplikacji windows forms to plik z końcówką .config. Dodajesz go do projektu tak jak każdy inny plik (klasę, formę, dataset, czy cokolwiek). Zajdziesz go w kategorii szablonów General, jako Application Configuration File Nie mam siły tłumaczyć Ci co i jak, powiem tylko że jest to typowy plik XML, więc zadania do wykonania w google (frazy do wyszukania i poczytania):
    - Application Configuration File
    - app config sql server connection string

    Rafal.J.645 napisał:

    Aplikacja będzie używana tylko na jednym komputerze. Serwer to chyba ten, na który logowałem się w SQL Management Studio, czyli \.SQLEXPRESS, tak?

    No tak. To w tej konfiguracji nie bawiłbym się w ręczne określanie pliku bazy danych, tylko zastosował rozwiązanie ze skryptem. Baza zostanie utworzona na samym początku w określonej lokalizacji i możesz o niej zapomnieć. Nie musisz się bawić w pliki konfiguracyjne, uprawnienia odczytu/zapisu w NTFS itd.

    0
  • #20 16 Maj 2012 20:54
    Rafal.J.645
    Poziom 11  

    markonedj napisał:
    Rafal.J.645 napisał:
    Chodzi o to, że piszę program na jakimś komputerze i chciałbym, używać go innych komputerach, na które przeniosę tylko mój program, a z tego co piszesz wynika, że będę musiał przenieść też skrypt do tworzenia bazy.

    No tak się to z reguły robi. Program wykonuje skrypt przy pierwszym uruchomieniu programu, tworzy bazę w podanej w skrypcie logalizacji (najlepiej umieszczać bazy w domyślnym folderze instancji czyli: C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\.
    Plus tego rozwiązania jest taki że nie musisz myśleć o pliku bazy danych, uprawnieniach dostępu na NTFS itp, bo co będzie jeśli program rzuci wyjątek że nie może czytać z określonego folderu bo nie ma do niego dostępu ?


    No dobra, skoro tak się robi to też tak zrobię ;)

    markonedj napisał:
    Nie rozumiem, np. SSMS wygenerował Ci następujący skrypt:


    No mi wygenerował to trochę inaczej:

    Kod: sql
    Zaloguj się, aby zobaczyć kod


    To coś źle kliknąłem, czy może on więcej plików generuje?


    markonedj napisał:
    Plik konfiguracyjny w aplikacji windows forms to plik z końcówką .config. Dodajesz go do projektu tak jak każdy inny plik (klasę, formę, dataset, czy cokolwiek). Zajdziesz go w kategorii szablonów General, jako Application Configuration File Nie mam siły tłumaczyć Ci co i jak, powiem tylko że jest to typowy plik XML, więc zadania do wykonania w google (frazy do wyszukania i poczytania):
    - Application Configuration File
    - app config sql server connection string


    Dzięki bardzo, tutaj już chyba sobie poradzę :).

    0
  • #21 16 Maj 2012 22:39
    markonedj
    Poziom 22  

    Rafal.J.645 napisał:

    No mi wygenerował to trochę inaczej:

    Kod: sql
    Zaloguj się, aby zobaczyć kod


    To coś źle kliknąłem, czy może on więcej plików generuje?

    No bo Tobie utworzył skrypt tworzący tabelę zamiast bazy danych :-P Musisz kliknąć prawym na nazwie bazy danych i wybrać Script Database As -> Create To. Wtedy utworzy Ci skrypt to stworzenia samej bazy danych (bez tabel, widoków, procedur składowanych itd.). Jeśli chcesz skrypt tworzący całą strukturę bazy (bez danych) to patrz moja 2 odpowiedź w tym temacie.

    0
  • #22 16 Maj 2012 22:57
    Rafal.J.645
    Poziom 11  

    markonedj napisał:
    Musisz kliknąć prawym na nazwie bazy danych i wybrać Script Database As -> Create To. Wtedy utworzy Ci skrypt to stworzenia samej bazy danych (bez tabel, widoków, procedur składowanych itd.). Jeśli chcesz skrypt tworzący całą strukturę bazy (bez danych) to patrz moja 2 odpowiedź w tym temacie.


    Aaa... teraz już kumam ;)

    A jak otworzyć ten skrypt?
    Taką komendą będzie ok? :
    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Edit

    Teraz próbuję nawiązać połączenie z bazą stworzoną w SQLSMS przez VS i wyskakuje mi błąd, że nie mam uprawnień do tego pliku. Co trzeba zrobić,
    żeby mieć te uprawnienia?

    0
  • #23 17 Maj 2012 10:29
    markonedj
    Poziom 22  

    Rafal.J.645 napisał:

    A jak otworzyć ten skrypt?


    Zakładam że korzystasz z wersji Express Visual Studio, więc odpadają rozwiązania w których można wykorzystać instalator aplikacji, żeby to on się zajął wykonywaniem skryptu podczas instalacji. Ponieważ jest on dostępny w wyższych wersjach VS więc będziesz musiał sobie poradzić ręcznie w kodzie programu.

    Więc lecimy.
    1. Przygotowujesz skrypt bazy danych (jak opisałem wyżej) zapisujesz go gdzieś na dysku np. D:\Sql\Baza_script.sql.
    2. Otwierasz VS i dodajesz ten plik do solucji.
    3. Potem tworzysz sobie dwie metody, będą one uruchamiane przy starcie programu i jedna będzie sprawdzać czy baza jest już na serwerze, a druga będzie odpowiedzialna za utworzenie skryptu jeśli bazy tam nie ma np.
    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    O ile metoda sprawdzająca czy baza jest na serwerze jest banalna o tyle metoda uruchomiając cały skrypt jest już bardziej skomplikowania ponieważ nie można sobie odczytać skryptu wygenerowanego przez sql i odpalić za pomocą metody ExecuteNonQuery klasy SqlCommand, gdyż, program zwróci wyjątek że nie rozpoznaje słówka GO które rozdziela batche sql, więc aby to obejść do projektu musisz dodać 3 dll-ki:
    - Microsoft.SqlServer.ConnectionInfo
    - Microsoft.SqlServer.Management.Sdk.Sfc
    - Microsoft.SqlServer.Smo
    Znajdziesz je w katalogu C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies.
    Następnie usingi:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    i właściwa metoda wykonująca skrypt:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    No i tyle, baza zostanie utworzona na serwerze.

    Rafal.J.645 napisał:

    Teraz próbuję nawiązać połączenie z bazą stworzoną w SQLSMS przez VS i wyskakuje mi błąd, że nie mam uprawnień do tego pliku. Co trzeba zrobić,
    żeby mieć te uprawnienia?

    Wklej cały opis wyjątku jaki Ci wyskakuje. Najlepiej obejmij twój kod do komunikacji z bazą za pomocą Try...Catch:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    0
  • #24 17 Maj 2012 20:40
    Rafal.J.645
    Poziom 11  

    Dzięki, kumam jak to zrobić, później sobie popróbuję ;)

    Co do braku uprawnień do pliku, to jeśli do Connection Stringa wpiszę
    od razu ścieżkę pliku to wyskakuje coś takiego:

    Code:
    An attempt to attach an auto-named database for file C:/Program Files/Microsoft SQL Server/MSSQL10.SQLEXPRESS/MSSQL/DATA/baza-elementow-elektronicznych.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share.


    A jeśli ścieżkę pliku określę przez OpenFileDialog to wyskakuje ostrzeżenie:
    Code:
     Nie masz uprawnień do otwarcia tego pliku.
    

    Skontaktuj się z jego właścicielem albo administratorem, aby uzyskać odpowiednie uprawnienia.

    0
  • #26 17 Maj 2012 22:12
    Rafal.J.645
    Poziom 11  

    W pierwszym wypadku wygląda to tak:

    Kod: sql
    Zaloguj się, aby zobaczyć kod


    A w drugim tak:

    Kod: sql
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #27 17 Maj 2012 22:42
    markonedj
    Poziom 22  

    Po co Ci dwa connection stringi ?

    Kod: sql
    Zaloguj się, aby zobaczyć kod

    0
  • #28 18 Maj 2012 21:07
    Rafal.J.645
    Poziom 11  

    Na raz używałem tylko jednego.


    Dziękuję bardzo, błąd już nie wyskakuje po użyciu connection stringa, który podałeś.

    Kliknąłem "Pomógł" i kończę temat.
    Jeszcze raz dziękuję.

    Pozdrawiam.

    0