Czasami istnieje potrzeba reprezentacji drzewa za pomocą tabeli. Klasycznym przykładem jest hierarchia pracowników w firmie. Bardzo popularną reprezentacją jest:IDEMPLOYEE int, IDMANAGER int, Title nvarchar(50). IDEMPLYOEE jest oczywiście kluczem głównym, z kolei IDMANAGER stanowi klucz obcy wskazujący na IDEMPLOYEE. Przykład wypełnionej tabeli:IDEMPLOYEEID_MANAGERTitle1NULLProject Manager21Senior Software Developer32Junior Developer41Senior database developer Rozwiązanie jak najbardziej poprawne....
Strona głównaUżytkownik
pzielinski | użytkownik
Bazy danych i XML 5163 dni, 3 godziny, 36 minut temu 63 źrodło rozwiń
Silnik Sql Server posiada kilka metod do pobierania daty i czasu. Część z nich jest już przestarzała i nie powinno się z nich korzystać. SQL Server 2008 wprowadził kilka dodatkowych funkcji: SYSDATETIME, SYSDATETIMEOFFSET, SYSUTCDATETIME. Wszystkie one pobierają czas z dokładnością do 100 nanosekund. Aby przekonać się co dokładnie zwracają najlepiej wywołać je:select SYSDATETIME() as'SYSDATETIME',SYSDATETIMEOFFSET() 'SYSDATETIMEOFFSET', SYSUTCDATETIME() as'SYSUTCDATETIME'; Jak widać SYSDATETIEM zwraca ...
Bazy danych i XML 5170 dni, 16 godzin, 4 minuty temu 40 źrodło rozwiń
Prawdopodobnie wszyscy znają już klauzulę group by w zapytaniach SQL – nie stanowi żadnej rewelacji. Myślę jednak, że znacznie mniej popularniejszą klauzulą jest GROUPING SETS. Rozważmy następujące zapytanie: selectfrom Products GROUPBY ProductCategory unionallselectfrom Products GROUPBY ProductSubcategory Zapytanie zwróci wiersze pogrupowane po kategorii produktu oraz podkategorii. Należy podkreślić, że grupowania wykonywane są niezależnie od siebie i nie mają charakteru hierarchicznego (tak jak to b...
Bazy danych i XML 5177 dni, 3 godziny, 58 minut temu 32 źrodło rozwiń
Dzisiejszy post ma charakter raczej ciekawostki– w praktyce nic przydatnego nie wnosi:). Wiemy, że wartości NULL mają specjalne znaczenie – podstawowe operacje matematyczne zachowują się inaczej niż na zwykłych liczbach. Podobnie jest z porównywaniem NULL ponieważ służy do tego specjalny operator (IS NULL). Istnieje jednak w SQL Server zmienna, której ustawienie pozwala porównywać wartości NULL za pomocą klasycznych operatorów ‘==’. Rozważmy następujące zapytanie:select*from Persons WHERE FirstName isnul...
Bazy danych i XML 5178 dni, 19 godzin, 14 minut temu 44 źrodło rozwiń
Czasami warto sprawdzić, czy wartości w podanych kolumnach zostały zmienione. Najłatwiejszym sposobem jest porównanie sumy kontrolnej. Jeśli stara wartość jest różna od aktualnej oznacza to, że któreś pole zostało zmienione. W T-SQL służy do tego funkcja CHECKSUMAGG:select CHECKSUMAGG(Credit) from Persons GROUPBY Persons Podobną funkcją jest CHECKSUM – liczy sumę kontrolną, jednak dla każdego wiersza a nie dla całych grup.Explore posts in the same categories:SQL Server This entry wa...
Bazy danych i XML 5181 dni, 21 godzin, 6 minut temu 25 źrodło rozwiń
W SQL Server istnieje kilka narzędzi pozwalających określić wydajność wykorzystywanych zapytań. Podstawowym i najbardziej chyba znanym jest SQL Server Profiler. Można go włączyć z poziomu Sql Server Management Studio (menu główne->Tools->Sql Server Profiler). Po uruchomieniu pojawi się okienko w którym można określić m.in. zdarzenia, które powinny być monitorowane. Następnie aby rozpocząć analizę należy wybrać Start Selected Trace (ikonka zielonej strzałki w ToolBar). Od tego momentu wszelkie zapytania ...
Bazy danych i XML 5183 dni, 23 godziny, 17 minut temu 61 źrodło rozwiń
Często zdarza się, że mamy dwie takie same bazy: jedną lokalną do testów oraz drugą produkcyjną, umieszczoną na zdalnym hoście. Rozwijając aplikację, naturalne jest, że będziemy zmuszeni modyfikować bazę danych (dodanie nowych tabel, kolumn itp.). Wgrywając nową wersję na serwer łatwo zapomnieć o dokonanych zmianach na bazie. Na szczęście istnieją programy, które pozwolą nam zsynchronizować obydwie struktury. Jednym z nich jest dbForge Schema Compare for SQL Server. Po uruchomieniu programu i wybraniu op...
Bazy danych i XML 5186 dni, 27 minut temu 66 źrodło rozwiń
Czasami warto zasugerować użytkownikowi dozwolone wartości w TextBox. Przykładem jest pole edycyjne w Google, które pokazuje najczęściej wyszukiwane frazy. W tym poście stworzymy podobną kontrolkę, wykorzystując do tego bibliotekę jQuery. Całość działa oczywiście na Ajaxie. Użytkownik wpisuje jakieś wartości w polu, zapytanie jest w tle wysyłane do serwera a ten z kolei zwraca listę podpowiedzi. Należy wprowadzić również pewne opóźnienie przed dostarczeniem zapytania ponieważ w przeciwnym razie zostanie ...
Często na stronie www chcemy umieścić elementy, które powinny być domyślnie zwinięte aby zajmowały mniej miejsca. Na przykład na tej stronie zdecydowałem, że filtrowanie wyników powinno domyślnie być schowane aby zajmowało mniej miejsca. Klikając na link “Pokaż\Ukryj” użytkownik może rozwinąć okno. Warto również zwrócić uwagę na animacje – okno nie pojawia się od razu ale stopniowo jest rozszerzane. Zaprezentowany wynik można łatwo uzyskać za pomocą biblioteki jQuery. Po ściągnięciu biblioteki oraz podłą...
W .NET mamy do dyspozycji funkcję Trim (string.Trim) służącą do usuwania pustych znaków (spacji) zarówno przed jak i po stringu. Przykład:string text=" jakiś tekst "; trimmedText=text.Trim(); // teraz trimmedText równy jest "jakiś tekst" Jak widać spację zostały usunięte. W T-SQL nie mamy dokładnie takiej samej funkcji ale łatwo uzyskać identyczny efekt za pomocą LTRIM oraz RTRIM:LTRIM(RTRIM(kolumna)) Najpierw usuwamy wszystkie znaki z prawej strony a potem dopiero z lewej. Można również napi...
Bazy danych i XML 5202 dni, 22 godziny, 58 minut temu 52 źrodło rozwiń
W poprzednich postach pokazałem jak tworzyć asynchroniczne formularze. Nie zawsze jednak chcemy wywoływać takie zapytania za pomocą przycisku Submit. Czasami lepiej użyć linku tekstowego lub po prostu obrazka. Ajaxowy link tekstowy bardzo łatwo utworzyć za pomocą metody ActionLink:
Podobnie jak w czystym ASP.NET, framework ASP.NET MVC pozwala na wysyłanie formularzy w tle. Załóżmy, że chcemy napisać shoutbox’a, w którym wysłanie wiadomości na serwer nie wymagałoby ponownego przeładowania całej strony. Zamiast definiowania formularza za pomocą Html.BeginForm, musimy skorzystać z Ajax.BeginForm:<%using(Ajax.BeginForm("AddMessage",new AjaxOptions(){ OnComplete="OnFinish", UpdateTargetId="messages"})) { %>// treść<%}%> Pierwszy parametr to nazwa akcji. W drugim parametrze prz...
Dzisiaj bardzo króciutki post. Do tabeli dodałem computed column (wartość liczona na podstawie innych kolumn). Formuła obliczająca wartość wyglądała następująco:VotesFor / TotalVoteCount Chciałem po prostu dodać kolumnę, która liczy procent oddanych głosów aby potem móc stworzyć indeks po tej kolumnie. W przypadku jednak gdy TotalVoteCount wynosi 0 pojawił się wyjątek Divide by Zero. Na szczęście funkcja NULLIF rozwiązała problem:VotesFor / NULLIF(TotalVoteCount,0) W sytuacji gdy TotalVoteCount rów...
Bazy danych i XML 5212 dni, 20 godzin, 19 minut temu 70 źrodło rozwiń
W jednym z poprzednich postów pokazałem jak zrealizować stronicowanie wyników. Kontrolka ListView z czystego ASP.NET miała jeszcze jedną zaletę – możliwość sortowania wyników po kolumnach. W dzisiejszym poście zaprezentuję sposób uzyskania takiego efektu w ASP.NET MVC w którym jak wiemy nie ma żadnych wbudowanych kontrolek. Dla zwizualizowania, efekt końcowy pokazuję na powyższym screenie. Mamy kilka kolumn, które są linkami. Po kliknięciu na daną kolumnę chcemy aby wyniki były posortowane za pomocą ...
Dziś pisząc pewien pakiet integracyjny (integration services) napotkałem na następujący błąd:Error: SSIS Error Code DTSECANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. The AcquireConnection method call to the connection manager "Excel Connection Manager 1" failed with error code 0xC00F9304. There may be error messages posted before this with more information on why the AcquireConnection method call failed. Stworzony pakiet składał się z Excel Source. Po odpaleniu wystąpił błąd właśnie na tym elemencie...
Bazy danych i XML 5222 dni, 12 godzin, 21 minut temu 19 źrodło rozwiń
W ASP.NET MVC nie ma wbudowanego wsparcia stronicowania dla wyświetlanych danych. W czystym ASP .NET mieliśmy do dyspozycji wiele zaawansowanych kontrolek, które wspierały mechanizm stronicowania (np. ListView). W ASP.NET MVC interfejs definiujemy za pomocą czystego HTML\XHTML i sami musimy zadbać o możliwość stronicowania. Nie jest to trudne ale wymaga jednak trochę nakładu pracy. Jeśli chcemy mieć elastyczną bibliotekę do obsługi stronicowania to implementacja jest już dość czasochłonna. Dlatego w tym ...
Jakiś czas temu (kilka miesięcy;)) obiecywałem, ze napiszę artykuł o WCF Data Service. Zainteresowanych odsyłam tutaj.
Programowanie rozproszone 5235 dni, 56 minut temu 111 źrodło rozwiń
W poprzednim poście przedstawiłem metodę Html.Display. Funkcja Html.Editor(…) w działaniu jest bardzo podobna – również służy do generowania szablonów na podstawie klas. Różnica polega na tym, że Html.Editor tworzy pola edycyjne TextBox. Służy więc do generowania formularzy edycyjnych a nie do prezentowania danych tak jak Html.Display. Sposób wykorzystania jest analogiczny do DisplayFor więc zachęcam do przeczytania poprzedniego wpisu. Poniżej końcowy wynik: Warto wspomnieć, że również można tworzyć w...
Podczas budowania formularzy często potrzebujemy wyświetlić zbiory danych. Załóżmy, że mamy klasę Contact zawierającą dane kontaktowe użytkownika (email, telefon, fax). W celu wyświetlenia informacji zawartych w klasie można oczywiście użyć zwykłych wywołań Html.Label np:Phone:<%=Model.Contact.Phone%>Email:<%=Model.Contact.Email%>Fax:<%=Model.Contact.Fax%> Metoda całkowicie poprawna jednak bardzo niewygodna – co jeśli do klasy dodamy nowe pole, np. MobilePhoneNumber? Oczywiście progr...
W poprzednim poście wyjaśniłem do czego służy klauzula WITH ROLLUP. Dzisiaj zajmiemy się bardzo podobnym mechanizmem – WITH CUBE. Najlepiej wyjaśnić to znów na przykładzie tabeli. Załóżmy, że mamy poniższe zapytanie:select StoreName,ProductType,sum(Number) from SoldProducts GROUPBY StoreName,ProductType W wyniku wykonania otrzymamy:StoreNameProductTypeSumaSklepA komputery1SklepAspożywka3SklepBkomputery4SklepBspożywka6 Jak wiemy z poprzedniego wpisu WITH ROLLUP umożliwi uzyskanie wyników hierarchiczn...
Bazy danych i XML 5242 dni, 13 godzin, 47 minut temu 41 źrodło rozwiń