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.

VB.NET - Połączenie z bazą danych SQL

huzzar.ts 18 Lip 2013 21:49 3588 12
  • #1 18 Lip 2013 21:49
    huzzar.ts
    Poziom 13  

    Siemka.

    Jeśli chce korzystać z bazy danych SQL i podczas pisania programu ja dodam, ustawie itd to wszystko działa jak trzeba.

    Pytanie jest takie. Piszę aplikacje która korzysta z bazy danych SQL. Bedzie zainstalowana na kilku komputerach w firmie. Tylko jak napisac kod zebym np: przy pomocy OpenFileDialog mógł ustawić z jaką bazą ma się połączyć program. Czyli jak to zrobić żebym miał możliwość zmiany ścieżki "adresu" bazy.

    W firmie jest serwer z dyskiem wspólnym, tam będą bazy danych. Przy instalacji aplikacji w ustawieniach chciałbym mieć opcje ustawienia ścieżki.
    np: W/Bazy danych/Baza towarowa.sql

    coś takiego..

    0 12
  • Pomocny post
    #2 18 Lip 2013 22:10
    marcinj12
    Poziom 40  

    Możesz zainstalować pełną wersję Express bazy SQL Server na jakimś serwerze, a aplikacje będą się do niego łączyć,kwestia odpowiedniego ustawienia connection stringa.

    Albo to, co OpenFileDialog zwraca, wykorzystać do utworzenia connection stringa - podajesz tam przecież ścieżkę do bazy, prawda?

    0
  • #3 18 Lip 2013 22:17
    huzzar.ts
    Poziom 13  

    Tylko pytanie czy jeśli na kompach w firmie widać dysk wspólny u każdego w mój komputer to wystarczy adres ścieżki. Czy muszę to inaczej zrobić?? Myślę że jeśli komp widzi już dysk to nie muszę się łączyć z nim przez serwer, komp jest już połączony ?? Dobrze myślę??

    0
  • Pomocny post
    #4 18 Lip 2013 22:24
    marcinj12
    Poziom 40  

    Jeżeli wszystkie komputery mają zamapowany zasób pod taką samą literą dysku - to tak, powinny widzieć i wystarczy podmiana ścieżki w connection stringu. Oczywiście muszą mieć też odpowiedni poziom dostępu do tej lokalizacji ustawiony. Pamiętaj też, że aplikacja instalowana u klienta najpewniej potrzebuje pewnego zestawu bibliotek, aby połączyć się z taką bazą.

    0
  • #5 18 Lip 2013 22:25
    huzzar.ts
    Poziom 13  

    A teraz jeszcze inna sprawa, w jakim programie moge stworzyć baze SQL. Sory ale w tym zielony jeszcze jestem.

    Albo inaczej.
    Potrafię napisać aplikacje w vb.net. Ona musi korzystać z jednej bazy danych. Dzięki niej będzie się wymieniała informacjami z innymi aplikacjami na innych kompach.
    Musi to być baza w SQL czy może jest jakiś inni rodzaj baz danych do takiej operacji.
    Chodzi o zapisywanie nowych danych, kasowanie i edycje.

    0
  • #6 18 Lip 2013 22:51
    marcinj12
    Poziom 40  

    Sposoby są dwa, zależy, jak dużo ma być rekordów i obciążenie bazy:

    1. możesz zainstalować na jakimś serwerze (lub nawet zwykłym komputerze) "normalną" bazę danych, z darmowych np. SQL Server Express, PostgreSQL, MySQL. Wtedy łączysz się z bazą, podając adres IP lub nazwę serwera. Dobre, wydajne rozwiązanie dla baz z dużą iloścą rekordów i/lub użytkowników, bazy danych tworzysz na jednym serwerze, więc i łatwiej nimi zarządzać, robić kopie etc.

    2. baza plikowa: plik .sdf (SQL Server Compact - ten co masz domyślnie w Visual Studio jak tworzysz nową bazę lokalną), ale może też być to np. SQLite lub zwykły MS Access. Taka baza jest "zwykłym" plikiem, jest dobra przy niewielkiej ilości rekordów (każdorazowa operacja na takiej bazie wymaga pobrania całego pliku bazy przez sieć - a to może być wolne), należy też uważać przy jednoczesnej pracy kilku...nastu użytkowników jednocześnie.

    Bazą danych najprościej zarządzać przez graficzną nakładkę - każda baza ma swoje własne, np. bazę plikową SQL Servera zrobisz prostym edytorkiem bezpośrednio z Visual Studio, musisz sobie tylko włączyć okienko Database Explorer.
    Bardziej zaawansowane jest narzędzie o nazwie Sql server management studio - możesz w nim zarządzać zarówno pełną wersją SQL Servera, jak i plikową Compact.

    huzzar.ts napisał:
    Musi to być baza w SQL czy może jest jakiś inni rodzaj baz danych
    Nie ma "innych" rodzajów baz danych - to znaczy może i są, ale nie w tym kontekście pytasz... SQL to język zapytań do obsługi bazy danych - nie robi się "bazy w SQL".

    Jeżeli wymieniasz małą ilość informacji, możesz zapisywać pliki: tekstowe, binarne, .xml. Zależy... Jak chcesz dodawać, kasować i edytować rekordy - to raczej baza danych.

    0
  • #7 18 Lip 2013 23:21
    huzzar.ts
    Poziom 13  

    W takim razie zrobię bazy w access. Najlepiej się w tym czuje, dość prosty jest i już próbowałem coś tam w nim robić i łączyć go z vb.

    1. Tylko pytanie ile to jest duża baza rekordów (ile komórek) tak na oko. I co sie dzieje jak jest ich więcej niż powinno??

    2. I co się dzieje jak działa na tej bazie przykładowo 10 osób jednocześnie?? Spowalnia czy jakieś błędy się pokazują??

    0
  • Pomocny post
    #8 18 Lip 2013 23:46
    marcinj12
    Poziom 40  

    huzzar.ts napisał:
    1. Tylko pytanie ile to jest duża baza rekordów (ile komórek) tak na oko. I co sie dzieje jak jest ich więcej niż powinno??
    Tak bardzo-bardzo na oko: w przypadku bazy plikowej kilka milionów rekordów, rozmiar: > 1GB.

    U mnie w pracy działa baza w Accesie mająca ~600.000 rekordów, 120MB, używana jednocześnie przez wielu użytkowników, ale tylko do odczytu danych. Nie zauważyłem z nią specjalnych problemów. Niemniej czasami, kiedy wykonuje się na niej skomplikowane zapytania SQL, innym użytkownikom trochę "spowalnia".
    Jedynie przypuszczam, że aktualizując mocno takiego Accesa (kilka operacji na sekundę) może być już problem choć osobiście nie spotkałem się jeszcze z jakimś limitem który dałby mi się we znaki, więc możesz być dobrej myśli.

    huzzar.ts napisał:
    I co się dzieje jak działa na tej bazie przykładowo 10 osób jednocześnie?? Spowalnia czy jakieś błędy się pokazują??
    Błędów raczej nie powinno być, może spowolnić, jeżeli jeden użytkownik przyblokuje bazę np. wykonując skomplikowane zapytanie albo modyfikując dużą ilość rekordów. Wszystko zależy, jak często tych 10 użytkowników będzie np. dodawać rekordy. Jeżeli jeden rekord na kilka minut czy nawet co kilkanaście sekund - nie ma problemu. Gorzej, gdyby było to np. 10 maszyn wysyłających do bazy polecenie zapisu z częstotliwością 5 sygnałów na sekundę - wtedy obawiał bym się, czy Access wyrobi.

    Pamiętaj też, że otwierając u siebie tabelę w Accesie blokujesz ją do odczytu dla innych - wtedy użytkownik chcący z niej skorzystać dostanie błąd o odmowie dostępu z powodu blokady do edycji.

    0
  • #9 19 Lip 2013 17:15
    huzzar.ts
    Poziom 13  

    Łooo to spoko.
    Baza o takiej pojemności spokojnie mi wystarczy, dodatkowo bedą jeszcze inne bazy wiec nie będzie obciążona żadna z nich.
    Jeśli chodzi o użytkowników to chce to zrobić tak że wszyscy mogą tylko odczytywać dane z bazy. Tylko jeden komputer będzie działał automatycznie, przyjmował zlecenia i na ich podstawie modyfikował bazę.

    Wielkie dzięki za pomoc.

    Jedna sprawa tylko. Masz może jakiś przykładowy kawałek skryptu z zapisana taka reakcja jak zmiana adresu bazy. Może być pod button-em. Tak poglądowo, rozkminie to i już będę wiedział co i jak.

    Jeszcze raz dzięki.

    0
  • #10 19 Lip 2013 17:33
    marcinj12
    Poziom 40  

    Z tym odczytam w przypadku bazy plikowej, w każdym razie a Accesem, jest tak, że możesz zrealizować tylko odczyt z poziomu aplikacji. Jednak, aby bazę otworzyć, użytkownik musi mieć również uprawnienia do modyfikacji folderu z bazą, ponieważ przy otwarciu Access musi sobie utworzyć plik .ldb, który potem skasuje. Czyli, de facto, użytkownik znający ścieżkę do bazy, ciągle może w niej namieszać i np. ją usunąć - to tak informacyjnie.

    Przykładu skryptu nie mam bo nie pracuję w VB. Ale to jest naprawdę proste - robisz wszystko jak w zwykłym okienku do wyboru pliku, zapisujesz ścieżkę pliku do zmiennej i podstawiasz ją w connection stringu zanim połączysz się z bazą, coś w stylu:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    A jeszcze lepiej utworzyć comboboxa, wpisać do niego nazwy poszczególnych baz, a w connection stringu podmieniać tylko nazwę bazy w ścieżce dostępu na tą, którą użytkownik wybierze z listy.

    0
  • #11 19 Lip 2013 17:49
    huzzar.ts
    Poziom 13  

    Myślałem też nad takim rozwiązaniem.
    Bazy są zapisane tylko na (nazwijmy to komputerze operacyjnym). W nim są wszystkie dane.
    Użytkownik wybierając odpowiednią opcje w programie, automatycznie wysyła coś na styl zapytania do kop. operacyjnego. On w odpowiedzi przesyła do użytkownika bazę jaką wybrał. Aplikacja na jego kompie odświeża dane i użytkownik widzi wynik. Dzięki temu bazy główne zawsze są zabezpieczone przed dostępem innych bo są na innym kompie do którego nią ma dostępu.

    0
  • #12 20 Lip 2013 13:43
    marcinj12
    Poziom 40  

    Kolego, im bardziej ten wątek rozwijasz tym bardziej dochodzę do wniosku, że wybór bazy plikowej w Twoim wypadku jest złym rozwiązaniem...
    Przeysłanie całego pliku bazy na komputer użytkownika jest dziwnym pomysłem - a w każdym razie raczej niespotykanym.

    Moja sugestia: zapomnij o Accesie czy innej bazie plikowej. Zainstaluj na tym komputerze jakiś darmowy silnik bazodanowy.

    Osobiście pracuję na PostgreSQL i mogę śmiało polecić. Na ich stronie w sekcji download pobierasz ok. 50 MB instalator. Link masz tutaj. Instalujesz go na komputerze który nazywasz "operacyjnym" (a na potrzeby deweloperki zawsze możesz zainstalować go na swoim, w connection stringu piszesz wtedy localhost zamiast nazwy lub adresu ip komputera - serwera). Razem z bazą masz narzędzie pgAdmin III do graficznej edycji bazy.

    Obsługa jest względnie prosta, choć pierwsze kroki mogą być trudne. Poszukaj jakiegoś tutoriala na sieci: jak dodać bazę danych, w niej jak dodać tabele, jak założyć użytkownika i przypisać mu uprawnienia dostępu do bazy i sekencji autoinkrementacji (tutaj wskazówka - z poziomu menu opcji trzeba coś włączyć, żeby wyświeltał listę użytkowników, teraz nie pamiętam co ;)). Wskazówka 2: używaj tylko małych liter i bez spacji w nazwach tabel czy pól.

    Następnie ściągasz sterownik do bazy z tej strony - pod odpowiedni framework. Dwie biblioteki: npgsql.dll i coś z mono wrzucasz do katalogu z projektem i podłączasz referencję z posiomu visual studio. W sekcji dokumentacji masz dużo przykładów.

    Dalej pracujesz dokładnie tak, jak z Accessem - składnia zapytań SQL jest trochę inna (bogatsza), ale w sporej części zgodna ze standardami. Np. jak w accesie miałeś obiekt OleDbConnection, tak w Postgresie będzie to NpgsqlConnection.

    Ewentualnie, jeśli Postgres Ci nie podejdzie, spróbuj z SqlServer Express (wersja do wyboru - 2008 wystarczy). Do tego narzędzie Sql Server Management Studio.
    Zarówno obsługa jak i instlacja i konfiguracja wg mnie trudniejsza niż w przypadku Postgresa, ale to kwestia przezwyczajenia.

    Jak już uda Ci się połączyć z bazą i poćwiczyć zapytania do niej z poziomu aplikacji, tworzysz kilka baz danych do wyboru przez użytkownika. Nawę bazy zmieniasz w connection stringu - w tym wypadku nazwa serwera będzie taka sama.
    Możesz utworzyć użytkownika, który ma tylko prawo do robienia SELECT, więc nic Ci w bazie nie namiesza. A oprócz tego warto co jakiś czas rozbić zrzut (kopią zapasową) bazy - to tego wystarczy prosty batch z odpowiednią komendą wrzucowny do schedulera.

    Polecam poćwiczyć i nie zniechęcać się początkowymi trudnościami - jakby co pisz na priva, pomogę w sprawie Postgresa. Jeżeli mimo wszystko uznasz że to nie to, zawsze możesz wrócić do plików ;)

    0
  • #13 20 Lip 2013 14:31
    huzzar.ts
    Poziom 13  

    Pierwsze co to wielkie dzięki za zainteresowanie, mnóstwo sugestii i pomocy.

    Problem rozwiązałem w ten sposób i sprawdziłem to w praktyce wczoraj w firmie.
    Stworzyłem prostą aplikacje do testów, ma ona 2 klasy uprawnień.

    1. Tylko odczytywanie i wgląd w bazę.
    2. Edycja i wszystkie inne uprawnienia.

    Plik z bazą zrobiłem w access i zabezpieczyłem hasłem. Z kompa użytkownika nie da się usunąć pliku z dysku wspólnego, nie można go otworzyć bez podania hasła. Ale aplikacje łączy się z nim i w niej widać zawartość bazy. Ja w tym samym momencie dodawałem pozycje, usuwałem itd i wszystko się aktualizowało w bazie. Użytkownik widział zmiany.

    Czyli teoretycznie problem mam rozwiązany.
    Problem miałem tylko z napisaniem kodu do obsługiwania OpenFile tak żeby zmieniać bazy widoczne w DataGridView. Ale dzisiaj już to rozkminilem :D Zaraz opisze to na moim nowym poście. Może komuś się przyda.
    Ale jeśli mogę to będę Cie atakował jak coś mnie zatrzyma ;)

    0