2009-04-27 14 views
8

Bardzo proste pytanie. Buduję aplikację, która odczytuje dane z instancji SQL Server 2005. Chciałem uruchomić kilka testów na moim laptopie (który nie ma SQL 2005), więc szukałem zamiany w lokalnej bazie danych dla celów testów.Podłączanie do SQL CE db przy użyciu SQLConnection

Używam VS2008, więc wersja Compact Edition DB była naturalnym wyborem. Miałem nadzieję, że po prostu wymienię ciąg połączenia, ale wygląda na to, że pozwolę mi tylko połączyć się z bazą danych CE za pomocą SqlCeConnection, a nie SqlConnection. Jakikolwiek sposób obejścia tego, modyfikatory mogę używać w łańcuchu połączenia może?

Odpowiedz

7

To rzeczywiście bardzo możliwe użytkownika SQL CE zamiast pełnowymiarową SQL Server tylko przez modyfikowanie parametrów konfiguracyjnych: zmiana ciąg połączenia i używać IDbXXX interfejsy rodzinie w miarę możliwości zamiast platformy specyficzne SqlXXX i SqlCeXXX nich. Zobacz DbProviderFactories.

Należy jednak pamiętać o różnicach w dialektach SQL tych dwóch platform.

+0

dokładnie to, czego szukałem dzięki. działa przyjemnie. – TygerKrash

+1

Czy znasz dobry link, który podkreśla "różnice w dialektach"? Byłoby bardzo przydatne, gdyby strona zawierała listę najważniejszych rzeczy, których nie obsługuje, obecnych w SQL Server. – noelicus

1

Wszystkie obiekty powiązane z SQL, których potrzebujesz dla DB, dziedziczą od podstawowego abstrakcyjnego DB ... (tj. DbConnection, DbDataAdapter itd.). Możesz więc napisać coś w rodzaju klasy DatabaseManager, która, gdy instancja musi wiedzieć, czy masz do czynienia z Sql lub Sql Ce. Następnie od tego momentu zajmujesz się tylko obiektami klasy bazowej (DbConnection itp.). W ten sposób wszystko, co musisz zmienić za każdym razem, jest tą instancją klasy menedżera.

Kolejnym plusem do zrobienia tego w ten sposób, jest to, że jeśli później zdecydujesz się na zupełnie innego dostawcę, niewiele kodu musi się zmienić.

4

Tak, możesz użyć SQL Compact i/lub SQL Server, odwołując się do klas bazowych. Na przykład:

IDbConnection Connection; 

if (Compact) 
    Connection = new SqlCeConnection(); 
else 
    Connection = new SqlConnection(); 

Połączenie ciąg musi wskazać w pliku danych programu SQL Compact, na przykład: "Data Source=urData.sdf;Persist Security Info=False;". Więcej examples here.

Ten link wyjaśnia, co to jest differences there are between SQL Server and SQL Compact, ponieważ nie jest to identyczne.

+0

Dzięki za dodatkowe informacje na temat różnic dialekt, to jest przydatne. Myślę, że przykładowy kod również będzie działał, ale nie jest tak czysty (mając na uwadze wyraźne odwołanie typów połączeń CE), ponieważ unika wyraźnych odwołań do klas i używa fabryk DbProvider i używa konfiguracji do zarządzania typem połączenia (jak w przypadku wybranej odpowiedzi). – TygerKrash

Powiązane problemy