Pokazywanie postów oznaczonych etykietą MS SQL Server. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą MS SQL Server. Pokaż wszystkie posty

wtorek, 16 kwietnia 2013

Node.js + Microsoft SQL Server (2)

Kontynuacja poprzedniego tematu, czyli Sql Server na node.js. Dziś poruszę kwestię obsługę procedur z parametrami output.

Jak wskazuje jeden z linków z poprzedniego posta, w aktualnej wersji drivera dla Microsoft SQL Server nie ma specjalnego wsparcia dla obsługi tej funkcjonalności (podobnie jak nazwanych parametrów). Jest propozycja, by zostało to zaimplementowane w postaci zwracania wielu rezultatów z procedury (wartości parametrów out jako pseudo-rezultaty).

No dobra, ale jak sobie poradzić teraz z tym? Driver Microsoft wydaje się najpewniejszym sposobem dostępu do Sql Server. Owszem można spotkać inne pakiety node.js, ale nie rzuciło mi się na oczy nic szczególnego, zwłaszcza z takim ficzerem. Zawsze mogę też użyć .NET dzięki edge.js… Ale istnieje też rozwiązanie problemu w samym T-SQL. Tymczasowo możemy opakować wywołanie procedury z parametrami out, tak by zasymulować zwracanie wielu wyników. Robimy to albo w postaci innej procedury lub w postaci ciągu instrukcji T-SQL przekazywanych wprost do obecnej wersji drivera!  W poniższym przykładzie skorzystałem z tej drugiej opcji.

Capture2_thumb5

sn9

Podobnie jak w poprzednim poście z metadanych i danych w wierszach buduję obiekty z właściwościami. Otrzymuję w przeglądarce dynamicznie wyniki w postaci JSON:

image

Uzyskałem wynik podobny to tego, jaki dostanę po zastosowaniu przyszłej wersji pakietu node.js dla MS SQL Server –;) 

poniedziałek, 15 kwietnia 2013

Node.js + Microsoft SQL Server (1)

Tym razem podsumuję sposoby dostępu do bazy Microsoft Sql Server z poziomu node.js.

Mamy ogólnie dwie wygodne opcje:

Jako że już sporo pisałem o Edge.js, dziś skupię się na dedykowanym pakiecie. Na początek kilka faktów:

Spróbujmy z node.js wywołać procedurę składowaną. Aby było ciekawiej weźmy taką, która zwraca dwa zbiory wyników. Odpowiedni kod w TypeScript/JavaScript wygląda następująco:

Capture2Capture

W przypadku wielu wyników callback w wywołaniu queryRaw jest wywoływany tyle razy, ile jest wyników (w moim przypadku dwa razy). Aby obsługa wielu rezultatów działała, używamy wywołania queryRaw z parametrem more. Bez niego zostanie zwrócony tylko pierwszy rezultat procedury. Wywołanie bez more zwykle stosujemy przy procedurach zwracających jeden wynik.

Kod z pętlami ma za zadanie zmienić strukturę zwracanych danych, tak by zamiast wszystkich metadanych kolumn i wierszy zwracać obiekty z odpowiednimi właściwościami. Zwracany do przeglądarki JSON wygląda w moim przypadku następująco:

image

Zmiana lub podmiana procedury w bazie powoduje zwracanie danych o innej strukturze bez żadnej modyfikacji kodu serwera. Pełna dynamiczność przy krótszym i prostszym kodzie niż C#. Do more with less!

czwartek, 11 kwietnia 2013

Node.js + Edge.js (1)

Wiele osób mówi, że świat zmierza ku JavaScript. Jednak czy zawsze jest to taki optymalny wybór? A co z dotychczasowym naszym kodem w innych językach? Nie będziemy chyba że wszystkiego przepisywali na JavaScript –;)  Ponadto czy kod JavaScript jest wydajny tak samo jak .NET czy C++? Owszem pojawiają się już pewne sposoby jego optymalizacji, a czasami odbywa się prekompilacja,  ale weźmy pod uwagę przeciętną sytuację. A co jeśli bedziemy chcieli skorzystać z natywnych funkcjonalności Windows albo dotychczasowych komponentów napisanych w .NET?  To wszystko wymaga współdziałania innych języków z JavaScript. Jednak do tej pory z reguły nie było to takie wygodne. Przed podobnym problemem stali z pewnością twórcy WinRT, którzy wymyślili projekcję. Ale dziś skupmy się na serwerze node.js.

Integracja aplikacji serwerowej node.js z kodem natywnym jest jak najbardziej możliwa, aczkolwiek do wygodnych i prostych nie należy. Z wielką pomocą przychodzi projekt Edge.js, który sprawadza się do hostowania CLR .NET 4.5 w procesie node.js. Ogromnie to upraszcza interoperabilność JavaScript z .NET (C#, F#, Python, w zasadzie każdy język CLR), a także korzystanie z natywnego API Windows czy komponentów COM. Co ciekawe C# możemy używać w postaci kompilowanych dll-ek, ale także w postaci skryptowej,  kojarzącej mi się z przyszłościowym projektem “Roslyn”, ale także… ze zwyczajnym ASP.NET Web Forms i MVC.

Poniżej prosty przykład wyciągający informacje z bazy Microsoft SQL Server. Tak wiem, teraz jest modny no-SQL i on jest typowy dla node.js, ale przecież relacyjne bazy danych nadal są popularne, w niektórych zastosowaniach są lepsze, a bardzo często nowe projekty muszą opierać się o istniejące rozwiązania.

Stosunkowo niedawno został wydany Microsoft Driver for Node.JS for SQL Server Preview (WindowsAzure / node-sqlserver).  Aczkolwiek są zgłoszone różne bugi, nie wszystko jest w nim zaimplementowane i potrzebny jest natywny klient do SQL Server 2012… Czy jest jakieś inne rozwiązanie? 

Tak, jeśli skorzystamy z hostowania kodu .NET. Zresztą autor Edge.js w przykładach daje prostą obsługę podstawowych operacji select, add, update, delete za pomocą ADO.NET (poniższy screen).  Bardziej złożone przypadki możemy oprogramować sobie w C# sami, przecież to już znamy. Jeśli bierzemy przykład autora to pamiętajmy ustawić zmienną środowiskową “OWIN_SQL_CONNECTION_STRING” na connection string do naszej bazy. Oczywiście instalujemy też pakiet “edge” na node.js.

sn4

Dysponując już takim API do danych wywołujemy go z poziomu JavaScript, co jak widać jest bardzo naturalne i proste.

sn1

Odpalamy serwer…

sn2

Sprawdzamy, co nam wypluje serwer REST-owy… Jak widzimy otrzymujemy na wyjściu JSON-a z danymi zwracanymi wprost z bazy danych.

sn3

Na razie tyle. Kolejne informacje wkrótce.