Article View: alt.pl.comp.lang.csharp
Article #715Re: Pytanie o prace z ADO.Net
From: Maciej Łuszczyński
Date: Sun, 04 Apr 2004 11:47
Date: Sun, 04 Apr 2004 11:47
92 lines
6338 bytes
6338 bytes
>> A nie jest tak, ze kazde zapytanie przychodzace do SQL Servera jest >> parsowane, a nastepnie tworzony jest plan wykonania zapytania, pod >> warunkiem, ze nie jest to odwolanie do funkcji lub procedury? Czyzby >> DataAdapter potrafil to obejsc? Chetnie dowiem sie czegos wiecej ww >> temacie. > Nie, chodziło mi to co się dzieje po stronie klienta. Np. zapytanie > modyfikacji tabeli może być bezpośrednio wprowadzone w czasie tworzenia > aplikacji do obiektu Command w DataAdapterze albo generowane dynamicznie > przez SQLCommandBuilder. Ta druga metodę ma tą niedogodność, że musi odpytać > bazę danych o strukturę tabeli aby móc takie zapytanie wygenerować. Spory spadek wydajności IMO. Poza tym staram się stosować zasadę ograniczonego zaufania i powtarzalnych wyników: do serwera powinno docierać zawsze to samo. IMO. > Jeśli chodzi o stronę serwera podobno można obejść proces prasowania > zapytania. Zdecydowanie można, ze względu na wydajność nawet należy :) Ale nie parsowania, tylko układania planu wykonania zapytania. > Po pierwsze serwery mogą posiadać własne API. Może to być metoda > wydajniejsza ale na pewno nie łatwiejsza w używaniu. To dylemat stary jak świat. Trzeba coś wybrać :) > Po drugie procedury składowane. Podejrzewam, że ich użycie nie wiąże się z > prasowaniem ich treść za każdym razem. Procedury składowane są preferowane > do załatwiania updateing logic. Ale niestety zarówno AFAIK genertor zapytań > zawarta w IDE jaki i SQLCommandBuilder nie pomogą w ich używaniu. Zarówno procedury, jak i funkcje składowane to po prostu skompilowane plany zapytania, przechowywane na serwerze. Wywołanie takiej procedury wymaga co prawda sparsowania (choćby po to, by odczytać parametry, by była możliwość przekazania wartości z procedury, itp.), ale nie wiąże się (ze zwykle dużo kosztowniejszym) układaniem planu zapytania. Nie używam SLQCommandBuildera, za to dość często procedur i funkcji składowanych. Nie wiem, czy zależy to od wersji VS, ale w moim przypadku wystarczy po prostu z eksploratora serwera przeciągnąć odpowiednią procedurę do formatki, a IDE automatycznie stworzy odpowiedni obiekt wraz z listą parametrów. Konieczne jest następnie przypisanie wartości wszystkim parametrom (ja robię to ręcznie), ale zakładam, że można zmusić SQLDataAdapter (nie używam go do aktualizacji) do odpowiedniego wykorzystania procedury składowanej i automatycznego podstawienia wartości. > Jest jeszcze wymierająca metoda Embeded SQL. Czyli SQL wpisany pomiędzy > zwykły kod. Takie coś jest także kompilowane i zamieniane na wywołania > funkcji serwera. Komunikacja z zapytaniami następuje przez specjalne > współdzielone zmienne. Tego nie znam. > Korzystając SQLCommandBuilder nie dosyć, że powoduje interpretacje kodu to > także generacje tego zapytania. Generowanie zapytania może mięć jedną > przewagę w przypadku updateing logic. Można spróbować nie modyfikować > wszystkich pól. W przypadku optymistycznego module, może to oznacza, że nie > napiszemy zmian dokonanych przez innych. Tak automagicznie działało ADO bez > .NET . Ale na ADO.NET ta metoda jest strasznie kłopotliwa więc zwykle wysyła > się wszystkie pola do modyfikacji. Za to rozwiązuje się te problemy szukają > rekordu, który ma być zmodyfikowany uwzględniając wszystkie pola albo wersje > rekordu. Jakoś nie jestem przekonany, czy to taka zaleta - nadpisanie tylko części pól. Włosy na karku mi się jeżą, jak myślę o takiej spójności. Nie bardzo mi się podoba pomysł automagicznego wyszukiwania rekordu do modyfikacji. Jestem za spójnym mechanizmem: PK i w oparciu o wartość tego klucza wstawiamy bądź modyfikujemy. Troszkę pozwolę sobie opowiedzieć, dlaczego wolę/wolimy procedury składowane. Jest to ostatni bastion logiki aplikacji. Oczywiście, można zrobić to samo na triggerach i ograniczeniach, ale procedury wydają się łatwiejsze w pielęgnacji, debuggowaniu i kontroli. No i całkiem szybkie przy zapisach dokumentów składających się z wielu linijek. Procedury działają oczywiście w ramach transakcji, więc spójność danych jest zachowywana. Co do ryzyka napisania zmian wprowadzonych przez innego użytkownika: na poziomie aplikacji, kiedy użytkownik wywołuje edycję, z serwera pobierana jest ostatnia wersja rekordu. Dzięki temu minimalizujemy ryzyko dwukrotnego wprowadzania tych samych zmian. Jeśli zachodzi konieczność wyłącznej edycji rekordu, stosujemy albo blokady na poziomie aplikacji (oczywiście wtedy sprawdzane jest to w momencie rozpoczęcia edycji, nieco trudniej kontrolować ten mechanizm w procedurach składowanych (a w zasadzie wymaga to większej uwagi)) albo SELECT z odpowiednimi parametrami. Jeśli dobrze pamiętam bieg niniejszego wątku, początkowy problem dotyczył aktualizacji i zapisu dużej liczby danych. IMO bezwzględnie najszybsze będą w tym przypadku procedury składowane, najwygodniejsze, jeśli da się je połączyć z SQLDataAdapterem (a powinno to być możliwe). Pozdrawiam -- Macko *** A czym się różni Cray od normalnego peceta? *** Tym, że Cray wykonuje pętle nieskończone w 10 sekund.
Technical Details
Message-ID:
<13m18xqz59hap.yfr7ocm8d9rf$.dlg@40tude.net>Path:
mbox-mo1.pugleaf.net!archiver1.google.com!news1.google.com!news.glorb.com!nntp.idg.pl!newsfeed.gazeta.pl!news.gazeta.pl!not-for-mailReferences:
<c49ept$fbg$1@news.onet.pl> <c4h5rd$753$1@nemesis.news.tpi.pl> <c4jvdi$u99$1@news.atman.pl> <c3yeak2tpn37.atid4u2mtmu8$.dlg@40tude.net> <c4n8kf$bg0$2@news.atman.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!archiver1.google.com!news1.google.com!news.glorb.com!nntp.idg.pl!newsfeed.gazeta.pl!news.gazeta.pl!not-for-mail From: Maciej Łuszczyński <mluszc...@gazeta.pl> Newsgroups: alt.pl.comp.lang.csharp Subject: Re: Pytanie o prace z ADO.Net Date: Sun, 4 Apr 2004 13:47:58 +0200 Organization: Portal Gazeta.pl -> http://www.gazeta.pl Lines: 92 Message-ID: <13m18xqz59hap.yfr7ocm8d9rf$.dlg@40tude.net> References: <c49ept$fbg$1@news.onet.pl> <c4h5rd$753$1@nemesis.news.tpi.pl> <c4jvdi$u99$1@news.atman.pl> <c3yeak2tpn37.atid4u2mtmu8$.dlg@40tude.net> <c4n8kf$bg0$2@news.atman.pl> Reply-To: mluszc...@gazeta.pl NNTP-Posting-Host: 80.50.174.166 Mime-Version: 1.0 X-Trace: inews.gazeta.pl 1081079274 21622 80.50.174.166 (4 Apr 2004 11:47:54 GMT) X-Complaints-To: use...@agora.pl NNTP-Posting-Date: Sun, 4 Apr 2004 11:47:54 +0000 (UTC) X-User: mluszczynski User-Agent: 40tude_Dialog/2.0.10.1pl Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit