Ok, egy példa:
Ha a sztornozást nézzük, adatkezelés szintjén ez most vhogy így néz ki:
db.Query("CALL sp_updateisstorno(" + treeFej.invoice.InvoiceID.ToString() + ")");
db.FreeResult();
Ha az SQL utasítások a kódba kerülnek tárolt eljárás helyett akkor a következő utasításokat kell a db.Query
-vel meghívogatni.
DECLARE NextInvoiceNumber VARCHAR(20); DECLARE lastid INTEGER; DECLARE IsOrder TINYINT(1); DECLARE origSzamlaszam INTEGER; DECLARE origPartnernev VARCHAR(50); DECLARE origPartnercim VARCHAR(106); DECLARE origPartnerBankszamlaszam VARCHAR(26); DECLARE origPartnerAdoszam VARCHAR(15); DECLARE origFizMod INTEGER; DECLARE origTeljesitesIdopontja DATE; DECLARE origSzamlaKelte DATE; DECLARE origFizetesHatarideje DATE; DECLARE origIsSztorno TINYINT(1); DECLARE origIsPrinted TINYINT(1); DECLARE origMegjegyzes TEXT; DECLARE origOrigSzamlafejID INTEGER; DECLARE origIsMegrendeles TINYINT(1); DECLARE tetelSzamlafejID INTEGER; DECLARE tetelTermek VARCHAR(100); DECLARE tetelMennyiseg INTEGER; DECLARE tetelAFA INTEGER; DECLARE tetelEgysegar INTEGER; DECLARE tetelKategoriaID INTEGER; DECLARE tetelITJ VARCHAR(10); DECLARE tetelMeId INTEGER; DECLARE tetelProductID INTEGER; DECLARE uniqueSzamlafejID INTEGER; DECLARE uniqueUniqueDescID INTEGER; DECLARE uniqueValue VARCHAR(255); DECLARE done INT DEFAULT 0; DECLARE curSZAMLATETEL CURSOR FOR SELECT SzamlafejID, Termek, Mennyiseg, AFA, Egysegar, KategoriaID, ITJ, MeId, ProductID FROM SZAMLATETEL WHERE SzamlafejID = ID; DECLARE curUNIQUEFIELDS CURSOR FOR SELECT UniqueDescID, Value FROM UNIQUEFIELDS WHERE SzamlafejID = ID; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; SELECT IsMegrendeles INTO IsOrder FROM SZAMLAFEJ WHERE SzamlafejID = ID; SELECT MAX(Szamlaszam) AS KovSorszam INTO NextInvoiceNumber FROM SZAMLAFEJ WHERE Year(SzamlaKelte) = Year(Now()) AND IsMegrendeles = IsOrder; SELECT IFNULL(NextInvoiceNumber+1, 1) INTO NextInvoiceNumber; SELECT Szamlaszam, Partnernev, Partnercim, PartnerBankszamlaszam, PartnerAdoszam, FizMod, TeljesitesIdopontja, SzamlaKelte, FizetesHatarideje, IsSztorno, IsPrinted, Megjegyzes, OrigSzamlafejID, IsMegrendeles INTO origSzamlaszam, origPartnernev, origPartnercim, origPartnerBankszamlaszam, origPartnerAdoszam, origFizMod, origTeljesitesIdopontja, origSzamlaKelte, origFizetesHatarideje, origIsSztorno, origIsPrinted, origMegjegyzes, origOrigSzamlafejID, origIsMegrendeles FROM SZAMLAFEJ WHERE SzamlafejID = ID; IF origIsSztorno > 0 THEN LEAVE sproc; END IF; INSERT INTO SZAMLAFEJ ( szamlaszam, partnernev, partnercim, partnerbankszamlaszam, partneradoszam, fizmod, teljesitesidopontja, szamlakelte, fizeteshatarideje, issztorno, isprinted, megjegyzes, OrigSzamlafejID, ismegrendeles) VALUES ( NextInvoiceNumber, origPartnernev, origPartnercim, origPartnerBankszamlaszam, origPartnerAdoszam, origFizmod, origTeljesitesidopontja, Now(), origFizetesHatarideje, 0, 0, origMegjegyzes, ID, origIsMegrendeles); SELECT LAST_INSERT_ID() INTO lastid; OPEN curSZAMLATETEL; REPEAT FETCH curSZAMLATETEL INTO tetelSzamlafejID, tetelTermek, tetelMennyiseg, tetelAFA, tetelEgysegar, tetelKategoriaID, tetelITJ, tetelMeId, tetelProductID; IF NOT done THEN CALL sp_insertinvoiceitem( lastid, tetelTermek, tetelMennyiseg * -1, tetelAFA, tetelEgysegar, tetelKategoriaID, tetelITJ, tetelMeId, tetelProductID); END IF; UNTIL done END REPEAT; CLOSE curSZAMLATETEL; SET done = 0; OPEN curUNIQUEFIELDS; REPEAT FETCH curUNIQUEFIELDS INTO uniqueUniqueDescID, uniqueValue; IF NOT done THEN CALL sp_insertuniquefield( uniqueUniqueDescID, lastid, uniqueValue); END IF; UNTIL done END REPEAT; CLOSE curUNIQUEFIELDS; UPDATE SZAMLAFEJ SET IsSztorno = 1, OrigSzamlafejID = lastid WHERE SzamlafejID = ID;
A végeredmény természetesen ugyanaz, de a kód áttekinthetősége lényeges eltéréseket mutat. Ismétlem ez szubjektív, de nekem könnyebbséget jelent, hogy a kódban csak egy CALL
-t eresztek el, a többit pedig MySQL Query Browser-ben szerkesztem.
Természetesen ez nem zárja ki, hogy mondjuk a MySQL-es rész tárolt eljárásokat használjon míg mondjuk egy Sqlite-os konfiguráció esetén az adatkezelő layert megvalósító osztály maga tartalmazza az SQL utasításokat.