SQL z palmtopa

Przechowywanie informacji w komputerze, który jest pod każdym względem miniaturką komputera typu desktop, wymaga zastosowania specjalnych, również miniaturowych narzędzi. Z pomocą przyjdzie SQL Server CE, który może działać zarówno jako samodzielna baza danych, jak i pośrednik w komunikacji ze zdalnymi serwerami SQL.

Przechowywanie informacji w komputerze, który jest pod każdym względem miniaturką komputera typu desktop, wymaga zastosowania specjalnych, również miniaturowych narzędzi. Z pomocą przyjdzie SQL Server CE, który może działać zarówno jako samodzielna baza danych, jak i pośrednik w komunikacji ze zdalnymi serwerami SQL.

Urządzenia mobilne - w odróżnieniu od komputerów stacjonarnych, które są na stałe podłączone do sieci - często zmieniają sposób dostępu do niej, a co najważniejsze, przez długi czas są od sieci po prostu odłączone. Dlatego aplikacja wielowarstwowa, której jeden element stanowi przenośny komputer Pocket PC, a pozostałe elementy są komputerami na stałe podłączonymi do sieci, musi mieć specjalną architekturę. Najważniejsza zmiana w stosunku do klasycznych aplikacji wielowarstwowych polega na tym, że część aplikacji odpowiedzialna za prezentację danych zawiera też wybrane elementy warstwy przetwarzania, a nawet przechowywania danych. Ile tych elementów musi się znaleźć w urządzeniu mobilnym? To zależy od wymagań stawianych aplikacji oraz czasu, przez jaki urządzenie pozostaje odłączone od sieci.

Platforma i narzędzia

W niniejszym artykule pokażemy, jak zbudować aplikację do komputera Pocket PC 2003 z systemem Windows CE.NET 4.2 lub starszego Pocket PC 2002 z systemem Windows CE 3.0. Do zrealizowania projektu potrzebny będzie SQL Server 2000 SP3a oraz SQL Server CE w wersji 2.0, dostępny bezpłatnie dla licencjonowanych użytkowników SQL Server 2000 Developer.

Oprócz bazy danych do przechowywania informacji potrzebne są również narzędzia programistyczne do zbudowania aplikacji, która te informacje wykorzystuje. Komputery Pocket PC, mimo że pojawiły się stosunkowo niedawno, już doczekały się kilku narzędzi, języków i metod programowania. Na potrzeby niniejszego tekstu wykorzystamy metodę najbardziej nowoczesną, czyli zbudujemy aplikację w języku C# w środowisku Visual Studio.NET 2003 z Smart Device Extensions, czyli komponentami umożliwiającymi programowanie różnych mobilnych urządzeń w zwykłym Visual Studio. Aby móc korzystać z SDE, musimy oprócz środowiska programistycznego zainstalować również Pocket PC 2003 SDK (dostępny bezpłatnie do ściągnięcia z Internetu).

Aplikacja będzie przeznaczona na platformę .NET, a konkretnie do jej kompaktowej wersji NET Compact Framework, która w komputerach Pocket PC 2003 jest na stałe zapisana w ROM-ie, natomiast do pozostałych urządzeń może zostać doinstalowana. Zastosowanie Visual Studio.NET do budowy aplikacji pozwoli wykorzystać wszystkie zalety tego środowiska, takie jak wizualne projektowanie formularzy czy automatyczne narzędzia dostarczające aplikację na platformę docelową ze wszystkimi niezbędnymi komponentami.

Architektura aplikacji

Aplikacja będzie współpracować z dwoma źródłami danych, tj. z lokalną bazą danych utrzymywaną przez SQL Server CE oraz ze zdalną bazą danych, przechowywaną w bazie SQL Server 2000. Trzeba jednak od razu zaznaczyć, że są co najmniej dwie metody realizacji tego zadania. Po pierwsze, można się podłączyć do zdalnego serwera SQL 2000 tak samo, jak z dowolnego innego komputera, a więc niekoniecznie komputera Pocket PC, wykorzystując np. zwykłe połączenia TCP/IP. Druga możliwość, znacznie ciekawsza, to wykorzystanie SQL Servera CE jako pośrednika w dostępie do danych w bazie SQL Server 2000 i uruchomienie specjalnych mechanizmów, które automatyzują tę komunikację. SQLCE, pełniący powyższą funkcję, wykazuje tu częściowe podobieństwo do serwera proxy, będzie bowiem pobierał informacje z serwera SQL 2000, przechowywał je lokalnie i udostępniał aplikacji. Co więcej, będzie te dane również lokalnie przetwarzał i odsyłał z powrotem do serwera zdalnego.

SQLCE oferuje dwa mechanizmy wymiany danych między serwerem zdalnym a bazą lokalną. Pierwszy to Remote Data Access (RDA), sprowadzający się do prostego pobierania i wysyłania danych, które za każdym razem zastępują dotychczasowe. Znacznie bardziej zaawansowane możliwości oferuje drugi mechanizm - Merge Replication, który inteligentnie skleja dotychczasowe dane istniejące z nowo nadesłanymi. W aplikacji wykorzystamy bardziej zaawansowany mechanizm.

Trzeba jednak zaznaczyć, że w odróżnieniu od standardowego dostępu za pomocą portów, zarówno RDA, jak i Merge Replication wykorzystują specyficzny rodzaj dostępu do danych. Nie jest to bowiem zwykła komunikacja za pomocą gniazd TCP/IP, lecz dostęp za pośrednictwem serwera WWW . Komunikacja między komputerem Pocket PC a komputerem desktop z bazą SQL Server 2000 przebiega zatem jak na poniższym rysunku.

gdzie pierwszy SQLCE oznacza komponent instalowany na komputerze Pocket PC, a drugi - komponent rozszerzający serwer WWW (konkretnie serwer Internet Information Services).

Instalacja serwera

Tworzenie wirtualnego katalogu serwera WWW o nazwie SQLMR.

Tworzenie wirtualnego katalogu serwera WWW o nazwie SQLMR.

Ponieważ tworzona przez nas aplikacja będzie działać w środowisku sieciowym, konieczne jest przygotowanie infrastruktury sprzętowo-systemowej. Potrzebujemy, po pierwsze, komputera Pocket PC 2003 z platformą .NET Compact Framework (w wypadku komputera Pocket PC 2002, .NET Compact Framework zostanie zainstalowany przez Visual Studio .NET podczas przesyłania do palmtopa gotowej aplikacji), a po drugie komputer z bazą danych. W naszym wypadku będzie to Windows Server 2003 z serwerem WWW IIS 6.0, bazą danych SQL Server 2000 SP3a oraz komponentem Server Tools z pakietu SQL Server CE 2.0. Aby jednak SQL Server CE działał poprawnie po zainstalowaniu łatki SP3a do serwera SQL, konieczne może być zainstalowanie jeszcze jednej łatki "SQL Server CE version 2.0 Update for Use with IIS and SQL Server 2000 SP3 or SP3a", która przywróci prawidłową współpracę serwera IIS z serwerem SQL, a także działanie usług replikacji danych.

Podczas instalacji pakietu SQL Server CE 2.0 tworzymy na serwerze IIS wirtualny katalog serwera WWW, poprzez który dostępny będzie mechanizm SQLCE. Przy wyborze rodzaju kontroli dostępu wybieramy dostęp anonimowy. W wypadku dysków NTFS ustalamy też prawa dostępu do folderu, w którym znajduje się biblioteka DLL bazy SQL Server CE 2.0.

Wybieramy dostęp anonimowy.

Wybieramy dostęp anonimowy.

Dostęp do bazy SQL Server 2000 kontrolowany jest przez Windows Integrated Authentication, a dostęp do serwera WWW jest anonimowy, czyli poprzez użytkownika IUSR_ALFA (gdzie ALFA to nazwa komputera).

Następnie na serwerze SQL 2000 tworzymy swoją bazę danych ze wszystkimi odpowiednimi tabelami i relacjami. Nadajemy użytkownikowi IUSR_ALFA prawa dostępu do bazy i uruchamiamy usługi publikacji, dystrybucji i replikacji, wybierając menu Tools, następnie Replication i Create and Manage Publications.

Następnie wskazujemy na dysku folder, który udostępniamy jako udział z prawami dostępu dla anonimowego użytkownika serwera WWW . Folder ten będzie służył do wymiany danych między komputerem Pocket PC, a serwerem SQL 2000. Następnie, aby określić interesujące nas sposoby aktualizacji danych, wybieramy Merge Publication.

Musimy też poinformować SQL Server, jakie urządzenia będą uczestniczyć w replikacji. Uaktywniamy więc dostęp dla urządzeń z zainstalowanym serwerem SQLCE.

Wybieramy bazę danych Baza, która będzie podlegać replikacji.

Wybieramy bazę danych Baza, która będzie podlegać replikacji.

Po wybraniu tabel, które będą podlegały replikacji, nadajemy nazwę nowo tworzonej publikacji BazaPub, akceptujemy domyślne ustawienia replikacji i pozwalamy kreatorowi utworzyć publikację oraz dokończyć konfigurowanie serwera SQL 2000 do pełnienia funkcji komputera publikującego dane oraz funkcji dystrybutora. W bazie pojawi się karta Publications, a w niej nasza publikacja BazaPub. Tym samym serwer - element systemu odpowiedzialny za przechowywanie danych - jest gotowy do pracy.

Środowisko pracy

Zanim przystąpimy do pisania aplikacji, musimy oprócz serwera przygotować komputer, na którym będziemy ją tworzyć. Określamy go jako Development System i nie jest to Pocket PC, w którym brak porządnej klawiatury skutecznie zniechęca do jakiejkolwiek pracy twórczej. Potrzebujemy więc jeszcze jednego desktopu, np. z Windows XP Professional, na którym instalujemy Visual Studio.NET 2003, a następnie Pocket PC 2003 SDK oraz oczywiście SQL Server CE, przy czym tym razem wybieramy do zainstalowania opcję Development Tools.

Wszystkie komputery, tj. serwer z bazą danych, komputer z Visual Studio.NET oraz komputer Pocket PC muszą się jakoś komunikować. Wykorzystamy więc wbudowaną w Pocket PC kartę WLAN, a komputery podłączamy do przełącznika sieciowego zintegrowanego z bezprzewodowym punktem dostępowym. W ten sposób wszystkie komputery znajdują się w tej samej podsieci i możemy je wyszukiwać za pomocą adresów IP. Możemy też dla wygody zainstalować na serwerze usługę DHCP do rozdzielania adresów oraz DNS w celu łatwiejszego identyfikowania komputerów.

Lokalna baza danych

Z punktu widzenia programisty, który musi napisać kod, dostęp do lokalnej bazy na komputerze Pocket PC prawie nie różni się od metod dostępu do lokalnej bazy danych stosowanej na komputerach typu desktop. Wykorzystujemy jednak w tym celu komponent SqlServerCe, a nie SqlClient. W Visual Studio.NET rozpoczynamy nowy projekt typu Smart Device Application i w oknie Solution Explorer dodajemy referencję do komponentu SqlServerCe. Na początku programu deklarujemy też korzystanie z przestrzeni nazw System.Data.SqlServerCe, dopisując dodatkową dyrektywę using:

using System;

using System.Drawing;

using System.Collections;

using System.Windows.Forms;

using System.Data.SqlServerCe;

Następnie definiujemy zmienne klasowe reprezentujące obiekty, za pomocą których będziemy wykonywać operacje na bazie danych:

SqlCeConnection SQLCONN;

SqlCeEngine SQLENG;

SqlCeCommand SQLCMD;

SqlCeDataReader SQLDR;


Zobacz również