2009-03-25 14 views
6

Jakiś czas temu zapytałem o numer question o to, który lokalny DB był odpowiedni dla mojej sytuacji. Potrzebowałem uzyskać dostęp do bazy danych zarówno z kodu .NET, jak i VB6. Przeważającą reakcją była SQLite. Jednak zdecydowałem się przekazać SQLite, ponieważ jedyny dostawca OLE DB pobiera opłaty licencyjne za każdą zainstalowaną kopię mojego oprogramowania. Wymaga również uruchomienia procedury aktywacji na każdym komputerze.Plusy i minusy silnika bazy danych Access. Życie po SQLite

Po przeanalizowaniu innych opcji (edycja SQL Server Compact - ledwo funkcjonalny dostawca OLE DB, Firebird - nie chcę płacić za innego sterownika, itp ...), doszedłem do wniosku, że jedynym wykonalnym wybór używa plików .MDB utworzonych przez Microsoft Access (lub silnik Jet).

Nie używam go od końca lat 90., więc mam następujące pytania do tych, którzy mają z tym doświadczenie.

  1. Czy rozwiązali problem, w którym baza danych ulegałaby uszkodzeniu od czasu do czasu.
  2. Czy dostęp do MDB z C# dokonane za pośrednictwem dostawcy ADO.NET OLEDB lub istnieje rozwiązanie natywne (nie mogę go znaleźć).
  3. Czy istnieje realna alternatywa dla naprawdę nieudanego edytora SQL w programie Access?

Dzięki.

+0

miałem kilka małych aplikacji dostępu używany przez wielu klientów, dla bardzo wielu lat i może przypomnieć tylko dwa przypadki korupcji do tej pory, jeden bardzo niewielki, drugi mniej, oba możliwe do odzyskania. Jest to kwestia prawidłowego ustawienia: http://allenbrowne.com/ser-25.html – Fionnuala

Odpowiedz

7

Raczej wtedy będzie "powrót" do Access, będę trzymać się z SQLite i używać dostawcy System.Data.SQLite SQLite dostęp do danych w kodzie .NET.

Następnie chciałbym utworzyć prostą klasę COM interop .NET do użytku przez VB6, która owija wszelkie wymagane funkcje dostępu do danych SQLite. Na koniec wystarczy odwołać się do niego i użyć go jako standardowego obiektu COM z projektów VB6.

Moja wiedza na temat Dostępu jest prawdopodobnie nieco przestarzała i stronnicza od złych doświadczeń, ale w granicach rozsądku wypróbowałbym większość innych opcji przed skorzystaniem z trasy dostępu.

+1

. Interop to dobry pomysł. Nie myślałem o tym. Dzięki. – AngryHacker

+0

Bez problemów. Masz dodatkowe trafienie wydajnościowe z opakowaniem COM dla każdego wywołania metody. Ale jeśli zaprojektujesz metody, aby można było je wywołać tylko raz lub dwa razy, a następnie, na przykład, każda iteracja w pętli, wydajność może być nadal całkiem dobra. – Ash

5

Czy brałeś pod uwagę SQL Server 2008 Express Edition (jako przeciwstawiający się SQL Server CE)?

1) Osobiście odkryłem, że większość przypadków, gdy Access DB zostało uszkodzone, wynikało z kodu, który nie został oczyszczony po tym, jak się uległ, lub gdy wystąpiła usterka karty sieciowej.

2)

string connectionString = @“Provider = Microsoft.Jet.OLEDB.4.0; " + 
          @"Data Source = C:\data\northwind.mdb; " + 
          @"User Id = guest; Password = abc123” 


using (OleDbConnection oleDbConnection = New OleDbConnection()) 
{ 
    oleDbConnection.ConnectionString = connectionString; 

    oleDbConnection.Open(); 

    ... 
} 

3) SQL Server 2008 Express Edition

+0

ostrzeżenie - Microsoft wychodzi z nową i inną Mobilną bazą danych co trzy lub cztery lata. – dkretz

+0

Mówisz, że możesz edytować SQL dla Access za pomocą SQL Server 2008 Express Edition? – AngryHacker

1

Można również wypróbować SQL Anywhere, który działa na różnych systemach operacyjnych i ma niewielki rozmiar. Działa dla mnie :)

2

Ponieważ format MDB jest mniej więcej przestarzały, wiedza z końca lat 90. jest dość aktualna. See this MSDN page

+0

Ta sekcja artykułu dotycząca przestarzałych technologii dotyczy MDAC, nie tyle o używaniu Jet przez inne interfejsy. Artykuł jest również błędny pod względem DAO, który ma ostatnią aktualizację w A2007. –

+0

To dlatego powiedziałem "mniej więcej", MS wydaje się, że trochę się pojawiło. Ale to nie jest platforma DB, na której wszystko się dzieje. –

+0

Pragmatyczna postawa IMO jest taka, że ​​Jet i format .mdb są przestarzałe, a ACE i format acdb mają przyszłość tylko w Accessie. Więcej zostało usuniętych z silnika (np. Bezpieczeństwo na poziomie użytkownika, replikacja) niż zostało wprowadzone (typy wielowartościowe, ktoś?), Ale to jest cena za postępy :) – onedaywhen

4

Uszkodzenie MDB jest w dużej mierze spowodowane awariami występującymi w komputerach klienckich, serwerach plików i sieciach, gdy baza danych jest otwarta. Jeśli umieścisz MDB na udziale plików, zawsze jest to ryzykowne, jeśli na lokalnym dysku twardym i używane przez jednego użytkownika problemy są znacznie rzadsze.

Nie spodziewałbym się, że SQLite będzie inny, a jeśli coś gorszego.

Okresowo uruchomiony JetComp.exe (pobieranie Microsoft) naprawi wiele problemów i kompaktowych tabel indeksowych i podobnych. Kopie zapasowe są ważne niezależnie od tego, z czego korzystasz.

Nie potrzebujesz w ogóle MS Access, aby używać Jet MDB. Istnieją narzędzia innych firm do projektowania schematu bazy danych i wykonywania interaktywnych zapytań, zarówno z linii poleceń, jak i GUI.

+0

Dzięki za twój punkt. Chciałem powiedzieć to samo. Wszystkie pliki bazy danych narażone są na ryzyko korupcji. Wszystkie pliki bazy danych wymagają efektywnej opcji tworzenia kopii zapasowych i odzyskiwania. Pliki dostępu nie różnią się. W związku z tym ich wadą jest dostęp ... nie można wykonywać kopii zapasowych na żywo. Ale można go użyć do pracy w wielu sytuacjach. –

1

Zapytanie od AngryHacker:

Q1. Czy rozwiązali problem, w którym baza danych ulegała uszkodzeniu od czasu do czasu.

Er, co?

W prawidłowo zaprojektowanych aplikacjach prawidłowo wdrożonych w prawidłowo utrzymywanych środowiskach nigdy nie wystąpił problem z korupcją. Nie widziałem uszkodzonego MDB w ciągu 3 lub 4 lat, a dziesiątki moich aplikacji są używane w pełnym wymiarze czasu przez wielu klientów w wielu różnych środowiskach operacyjnych.

Uważam, że większość osób, które doświadczają korupcji, to ci, którzy próbują udostępniać plik MDB wielu użytkownikom (niezależnie od tego, czy są podzieleni, czy nie). Ponieważ nie myślisz o korzystaniu z programu Access, nie stanowi to problemu.

Q2. Czy dostęp do MDB z C# dokonane za pośrednictwem dostawcy ADO.NET OLEDB lub czy istnieje rozwiązanie natywne (nie mogę go znaleźć).

Natywnym rozwiązaniem byłoby DAO, ale to COM, więc możesz tego nie chcieć używać. Z C#, powiedziałbym, że OLEDB jest twoim najlepszym wyborem, ale to nie jest moja dziedzina wiedzy, więc weź to z przymrużeniem oka. Wierzę, że Michael Kaplan poinformował, że dostawca Jet ADO/OLEDB był bezpieczny dla wątków, a DAO nie. Nie oznacza to jednak, że zalecał ADO/OLEDB w stosunku do DAO, ale jego komentarze pojawiły się także w kontekście Access, a nie w C#.

Q3. Czy istnieje realna alternatywa dla naprawdę nieudanego edytora SQL w programie Access?

Dlaczego miałbyś używać tego, gdy w rzeczywistości nie używasz programu Access? Możesz użyć dowolnego edytora SQL, który Ci się podoba, jeśli tylko przetestujesz, że napisany przez Ciebie kod SQL jest zgodny z dialektem SQL Jet.

Ja, po pierwsze, nie widzę problemu z edytorem SQL programu Access (innym niż niezdolność do ustawienia rozmiaru czcionki), ale potem piszę dużo mojego kodu SQL za pomocą QBE i nie nawet spojrzeć na widok SQL.

+0

"Dlaczego używałbyś tego, gdy nie używasz programu Access?" Er, co? Aby móc ocenić edytor SQL w programie Access jako bzdura, to z pewnością muszą korzystać z programu Access ?! – onedaywhen

+0

Nie sądzę, że Access ma edytor SQL jako taki; raczej ma budowniczy zapytań GUI, który ma widok SQL. Spójrz na internetowy formatator SQL (http://www.dpriver.com/pp/sqlformat.htm) i stopień, w jakim można go dostosować. Access nie ma porównywalnych funkcji :( – onedaywhen

+0

Nigdy nie przeoczyłem tych funkcji, ja. –

1

Aby odpowiedzieć na twoje pytanie dotyczące naprawdę brzydkiego edytora SQL w Accessie - z całego serca się zgadzam. Czcionka śmierdzi, MSAccess zawsze źle formatuje zapytanie, czasem dodaje metaznaki, które łamią mój SQL, i na koniec, ale najgorsze, jeśli nie potrafi parsować SQL, to nie pozwoli ci na dostęp do niego!

Moje rozwiązanie polega na użyciu zewnętrznego kodu. Używam DAO do tworzenia instancji MSAccess, a następnie można bezpośrednio edytować zapytania przy użyciu kolekcji QueryDefs. Pozwala ci robić większość rzeczy - tworzyć, zmieniać nazwy, edytować itd. Jest kilka rzeczy, których nie możesz zrobić w ten sposób - na przykład, nie masz dostępu do metadanych zapytania (opis, ukryty itp.).

kod zewnętrzny jest również wspaniałe, ponieważ można zbudować zestaw testów, określający oczekiwane wartości zwracanych itp

Powiązane problemy