Starší komentáře ke článku: Uložené procedúry v ASP - základy

Zpět na článek | Úvodní stránka Interval.cz

Avatar

Autor komentáře: Robert Víšek

Datum vložení: 16.5.2001 17:32:07

Téma zajímavé - chtěl bych uložené procedury používat i v ASP (momentálně je používám v jiných programovacích prostředích). Co bych však potřeboval vědět: procedura, která se spustí, má po svém ukončení nějaký status (<I>@@error</I>), který vypovídá o tom, jak daná procedura dopadla - jak tento status zjistit? Pro příklad - používám volání procedury přes <I>cmd.Execute</I>... Děkuji. RoVis.

Avatar

Autor komentáře: Slavomir Furman

Datum vložení: 20.6.2001 14:47:50

Osetrenie chyb je v T-SQL take ake je. V podstate ide o to, ze musite prakticky po kazdej vyznamnej casti kodu (v stored procedure) kontrolavat premennu @@ERROR a potom na zaklade jej hodnoty sa nejak rozhodovat co dalej. Mozete chybu ignorovat a ist dalej. Mozete robit nejake napravne akcie, pripadne mozete pre uzivatela generovat nejaku svoju uzivatelsku chybovu hlasku definovanu cez prikaz RAISERROR, alebo skoncit s nejakym status kodom vracanym zo stored procedury cez prikaz RETURN.
To samozrejme plati pre non-fatal chyby. Pri fatal chybach stored procedura okamzite konci a nakolko viem nie je sposob ako toto osetrit pomocou bezneho uzivatelskeho kodu.

Inak sa to asi neda urobit, bohuzial osetrenie vynimiek bude az v novej verzii SQL Servra ("Yukon"),ktora bude asi az niekedy v roku 2003, kedze tam uz bude mozno pisat kod (i stored procedur) priamo v C# ci vo VB.NET (alebo v inom lubovolnom jazyku pre .NET Framework). No to odbieham.

Do premennej @@ERROR sa vklada chybovy status posledne vykonaneho T-SQL prikazu. Ak bolo vsetko OK
je tam 0. Inak je tam kod T-SQL chyby. Hlaska k danej chybe je pod tymto cislom v systemovej tabulke sysmessages. Treba dat pozor, a pozriet tu premennu hned za prikazom ktoreho vysledok nas zaujima, lebo po dalsom uspesnom prikaze tam moze byt opat nula.

Nejake ukazky prace s @@ERROR a RAISEERROR su v SQL Server BOL, pripadne pozrite na clanky:

<a href='http://www.sqlteam.com/item.asp?ItemID=2463' target='_blank'>http://www.sqlteam.com/item.asp?ItemID=2463</a>
<a href='http://www.sqlteam.com/item.asp?ItemID=208' target='_blank'>http://www.sqlteam.com/item.asp?ItemID=208</a>

Inak osetrovat chyby v ulozenej procedure ma IMHO zmysel iba vtedy ak sa potrebujete na zaklade vysledku predchadzajuceho prikazu rozhodovat akym sposobom ma pokracovat dana ulozena procedura, cize ak priamo v nej v nejakom bode je vykonania potrebujete vediet z nejakeho dovodu vediet ci sa predosle prikazy vykonali OK a na zaklade tejto informacie nieco spravit.
Napr. ak nechcete vo vykonavani stored procedury pokracovat po non-fatal chybe jedneho z prikazov.

Inak je podla mna v ASP na osetrenie DB chyb vyhodnejsie pouzit na osetrenie chyb ADO objekt "Error".

Neviem co by som napisal viac. Ak chcete skuste sa spytat konkretne ak chcete.

Vdaka.
Slavo.

Avatar

Autor komentáře: Martin Vokroj

Datum vložení: 6.11.2002 9:41:08

Píšete:

"Použitie metódy "Execute" ADO objektu "Connection" je jednou z najjednoduchších metód ako to urobiť, jej nevýhodou je však to, že týmto spôsobom nemožno získať hodnoty výstupných parametrov, i keby v uloženej procedúre boli definované, a tiež takto nemožno získať z uloženej procedúry návratovú status hodnotu. "

Znamená to tedy, že v uložených procedurách nemohu použít select, který přejímá hodnoty z formuláře typu:

"SELECT jmeno FROM Users WHERE jmeno = " & Request.Form("JMENO") & ", objConnection" ?

Avatar

Autor komentáře: Slavomir Furman

Datum vložení: 6.11.2002 11:57:05

Zdravim!

No tak teraz si nie som isty ako to myslite. Stored procedury su databazove objekty umiestnene na SQL servri a ich zdrojak je pisany v SQL kode (hovorime o MS SQL7, MS SQL 2000), teda tam nemozete pristupovat k ASP COM objektom ako je napr. Request resp. k ADO objektom ako je Connection.

Samozrejme mozete hodnoty z formulara precitat v ASP kode a poslat ich do stored procedury ako jej parametre a takto ich spracovat. V SELECTe v stored procedure potom pouzijete tieto parametre stored procedury, v ktorych su ulozene hodnoty z formulara.

vdaka,
Slavo.

Avatar

Autor komentáře: jiri novotny

Datum vložení: 13.11.2002 15:52:37

Narazil jsem na problem pri pouzivani ulozenych procedur. po spusteni prikazu "set rs_zaznamy=conn.execute("nazev_procedury") ma objekt (promena) rs_zaznamy vlastnost recordCount nastavenou na hodnotu -1. Tedy hodnota, ktera se vraci i v pripade volani standardniho SQL dotazu z ASP paklize je typ dotazu nastaven na "adForwardOnly". Potreboval bych zjistit pocet zaznamu vracenych z ulozene procedury ale nevim jak toho dosahnout.

dekuji za pripadne zkusenosti a poznatky

Zpět na článek | Úvodní stránka Interval.cz