Aplikacja bazodanowa

0

Witam.
Obecnie zajmuje się pisaniem aplikacji, która będzie zawierała w sobie bazę danych z plikami .dbf (myślę o MSSQL server).
Aplikacja będzie na 2 komputerach, ale serwer bazy będzie znajdował się na jednym. Oba komputery korzystać będą z tej bazy oraz oba są w tej samej sieci.
Połączenie aplikacji z komputera, na którym jest baza wiem, jak zrobić. Pytanie jak połączyć się z tą bazą z drugiego komputera? Czy jest to możliwe? Muszę korzystać z WCF czy da się to zrobić w inny sposób, np. przez połączenia ADO.NET?

1

Żeby połączyć się z dowolną bazą musisz mieć connection stringa. Nie ma znaczenia, czy znajduje się ona na tej samej maszynie, w sieci lokalnej, internecie czy na Słońcu. Możesz użyć WCF, możesz użyć ADO.NET.

0

Czyli w connectionstringu podaje tylko IP komputera gdzie jest baza, port i nazwe bazy?

0

IP, a w sieci lokalnej nawet nazwę możesz.

0

Dzięki za odpowiedź.
Otwieranie plików .dbf i .ntx w C# stanowi jakiś problem? Musze jakieś dodatkowe programy pobrać, żeby móc odczytać zawartość tych plików?

0

A nie mam pojęcia co to za pliki. Ale jeśli jakieś bazy danych, to pewno trzeba znaleźć w necie odpowiedniego providera do nich.

0

Mam kolejne pytanie. Otworzyłem sobie te pliki .dbf (dbase 4) w DataGridView, wszystko ładnie się wyświetla. Problem w tym, że nie moge nic dopisywac w kolumnach, bo wyskakuje błąd. Da się to jakoś zmienić, czy tylko poprzez napisanie funkcji update'ującej konkretny wiersz kolumny?
Pliki otwieram normalnie z folderów, za pomocą odpowiedniego providera. Jest możliwość przerobienia tych plików, żeby działały za pomocą SQL? Szukałem programów do migracji z .dbf to sql, ale nie znalazłem nic odpowiedniego.

Jeszcze jedna rzecz. Mam też pliki .NTX, których w ogóle nie mogę otworzyć, a każdy zawiera jakieś dane. Potrzebuje converter na inny rodzaj pliku?

0

Mylisz pojęcia, plik dbf to plik z bazą danych, a sql to język zapytań stosowany do baz danych. Jeśli ten plik to baza danych mssql-a to musisz ją wrzucić na serwer mssql, a potem za pomocą m.in. ado.net połączyć się z tą bazą. Ado.net udostępnia interfejs do komunikacji z bazą za pomocą zapytań sql

0

Nie to nie jest plik sql. Są to pliki .dbf, które otwieram za pomocą System.Data.Odbc . Chodzi o to, że model tych plików wykorzystywany był w programie napisanym w DOS-ie. Teraz, żeby nie tworzyć nowej bazy po prostu otwieram ją w nowym programie.

0

Pliki NTX (NDX, IDX) to pliki indeksowe dla baz DBase (Clipper) lub MFox. Zawierają zapisane dodatkowe informacje np. B-drzewa. Do działania baz jako takich są zupełnie niepotrzebne. W Paradoxie to już trochę rozbudowano i tam są potrzebne. Jeszcze też zależy, w której wersji DBase były te pliki utworzone. Jeśli (chyba) 3 (albo 4), to spoko - możesz zignorować DLA WŁASNEJ aplikacji pliki NTX. Tylko musisz się pogodzić z tym, że jakakolwiek zmiana w bazie danych i twój program DOSowy może działać źle - bo prawdopodobnie nie zupdejtujesz indeksów. (Chyba że ten program ma możliwość odtwarzania indeksów). Dla wersji DBase 5 sytuacja jest badziej skomplikowana - tam pliki DBF mają zapisane w środku, że mają plik N*X, ale nie mają info jaki. Aha! Są jeszcze pliki DBT, które zawierają bloby do odpowiedniego DBF - tych nie możesz ignorować. Dla ciebie najlepszym rozwiązaniem byłoby przeniesienie danych na MS SQL. Można to zrobić za pomocą krematora wbudowanego w EM (SMSS) lub za pomocą linked serwer albo pokrewnych (OPENQUERY). Tam sobie możesz wtdy psuć do woli.

pozdrawiaMM

0

No właśnie chodzi mi o przeniesienie na MS SQL wtedy miałbym większe możliwości. Co prawda teraz mam kopie tych plików i mogę je psuć do woli, jednak cały czas otwieram je za pomocą OLEDB lub ODBC.
Mógłbyś szerzej opisać to, jak przenieść je na MS SQL?

0

To trudno, będę dalej działał na tym co mam.
Teraz mam trochę inny problem. Ładuje sobie bazę do DataGridView, napisałem funkcje, które wyszukują podany wiersz, usuwają zaznaczony oraz modyfikują obecne (klikam w komórkach po czym wpisuje dane). Problem w tym, że nie wiem jak zapisać aktualne dane do tego pliku, z którego czytałem. Nie wiem czy sam zapis DataGridView coś da, czy muszą jeszcze dodatkowo usuwać w samej bazie (SELECT FROM itd.)? Szukam na internecie jakiś funkcji, które pozwolą mi odświeżyć i zapisać nową bazę do tego samego pliku, ale nie znalazłem tego, o co mi chodzi.

Mam kolejny problem. Niektóre pola mają forme DateTime, w momencie kiedy chce dodać nowy rekord do bazy, wyskakuje wyjątek "String was not recognized as a valid DateTime." . Dane pobieram z textBoxa i zamieniam na DateTime w ten sposób:

DateTime.ParseExact(textBox2.Text, "yyyy-MM-dd", CultureInfo.InvariantCulture);

ponieważ struktura daty w bazie ma postać RRRR-MM-DD. Męczę się już z tym od dłuższego czasu i nie mam pojęcia, jak dodać nowy rekord ponieważ cały czas mam błąd...

Przepraszam za 3 post z rzędu, ale sytuacja tego wymaga :P.

0

A nie wymaga też wstawienia czasu?

0
somekind napisał(a)

A nie wymaga też wstawienia czasu?

DateTime.ParseExact(textBox2.Text, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture)

Też nic nie daje, konstrukcja zapytania wygląda tak:

@"INSERT INTO OSOBY(NAZWISKO,URODZONY)VALUES('" + textBox1.Text + "','" + DateTime.ParseExact(textBox2.Text, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture) +"'";

Dane podaje ręcznie, chce text wpisany w textboxa zapisać w bazie pod postacią daty.

0

A możesz pokazać jak wygląda przykładowy tekst z datą z tego textboxa?

0
somekind napisał(a)

A możesz pokazać jak wygląda przykładowy tekst z datą z tego textboxa?

w Całej kolumnie daty mają taką postać: 1972-05-12 i tylko to jest wpisane, nie ma czasu dodatkowo.

EDIT: Usunąłem godzine i wszystko działa :).

0

Małe zaciemnienie miałem, zrozumiałem, że błąd jest związany z bazą, a tak przecież nie jest.

  1. Pytanie zasadnicze - dlaczego używasz metody ParseExact?
MSDN napisał(a)

The format of the string representation must match the specified format exactly.

Zatem, jeśli w TextBoxie ktoś wpisze spację na koniec wprowadzonego napisu, to już nie będzie zgodna z założonym przez Ciebie formatem i zostanie rzucony ten wyjątek.
Rozwiązaniem jest użycie metody Parse, ale ona z kolei jest mało rygorystyczna, czyli uzna za prawidłowe daty napisy: "1972-05-12", " 1972-05-12 ", jak i " 1972 5 12 ". Inne rozwiązanie, to pozostawienie ParseExact, ale wywołanie na przekazywanym do niej stringu metody Trim w celu usunięcia spacji.

  1. Pytanie jeszcze bardziej zasadnicze - czemu do wprowadzania dat w ogóle używasz TextBoxa?
0
somekind napisał(a)

Małe zaciemnienie miałem, zrozumiałem, że błąd jest związany z bazą, a tak przecież nie jest.

  1. Pytanie zasadnicze - dlaczego używasz metody ParseExact?
MSDN napisał(a)

The format of the string representation must match the specified format exactly.

Zatem, jeśli w TextBoxie ktoś wpisze spację na koniec wprowadzonego napisu, to już nie będzie zgodna z założonym przez Ciebie formatem i zostanie rzucony ten wyjątek.
Rozwiązaniem jest użycie metody Parse, ale ona z kolei jest mało rygorystyczna, czyli uzna za prawidłowe daty napisy: "1972-05-12", " 1972-05-12 ", jak i " 1972 5 12 ". Inne rozwiązanie, to pozostawienie ParseExact, ale wywołanie na przekazywanym do niej stringu metody Trim w celu usunięcia spacji.

Słuszna uwaga, ale...

somekind napisał(a)
  1. Pytanie jeszcze bardziej zasadnicze - czemu do wprowadzania dat w ogóle używasz TextBoxa?

...Fakt, przecież jest DatePicker.

Tym razem mam problem z dodawaniem nowej kolumny do bazy danych. Przypomnę, że korzystam z Oledb, czyli baz accessa. O ile z samym dodawaniem raczej problemów, jako takich nie ma - do bazy się dodaje(zapytanie:

string zapytanie = @"ALTER TABLE Person ADD `" + textBox3.Text + "` TEXT(255)";

).
Problem pojawia się kiedy chce wyświetlić bazę w dgv. Nowo dodane kolumny pojawiają się i w tabeli bazy danych oraz po otwarciu w Accessie. Natomiast kiedy włączam program wciąż mam tylko podstawowe kolumny, które były od początku, nowo dodanych nie ma. Owszem zostaną dodane, ale dopiero kiedy w Accesie ustawie im kompresje UNICODE oraz ręcznie dodam je do dgv za pomocą "Add Column...". Da się jakoś poprawić to, albo jest jakiś inny (lepszy może) sposób na dodawanie nowych kolumn do dgv oraz bazy danych?

0

DGV ma ustawione AutoGenerateColumns na false?

0

O przeszło po ustawieniu na true :). Dzięki wielkie.

programmer napisał(a)

O przeszło po ustawieniu na true :). Dzięki wielkie.

Jednak nie, teraz mam trochę więcej kolumn i po dodaniu nowej znowu nie wyświetla. Można gdzieś ustawić odpowiednią wielkość dgv czy to się zawsze automatycznie powinno generować? Bo jak dodaje kolumne to mam w dgv i bazie, restartuje program i nie mam już tej kolumny w dgv (w bazie jest).

0

Ostatnie pytanie na koniec.
Co zrobić w wypadku, gdy baza stoi na plikach Access'a (używając OLEDB), a na jednym komputerze nie ma accessa i nie da się odczytać bazy. Czy można to w jakiś sposób pominąć, np. są jakieś providery pod to? Czy OLEDB jest już tak skonstruowane, że oba komputery muszą korzystać z Accessa do odczytu i zapisu pliku?

0

EDIT: Problem rozwiązany

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