Jos ohjelmassa on useita sql lausekkeita peräkkäin, niin miten saan asp.net c# rakennettua varmistuksen että kaikki sql lauseiden ajaminen onnistuu eikä esim ohjelman ajo kaadu lauseen 2 kohdalla odottamattomaan virheeseen ja muut lauseet jäävät ajamatta?
Epäselvemmin tuskin tätä voisi enää ilmaista;)
Esimerkki.
Tehdään tilaus. sql lauseella luodaan uusi tilaus tilauskansioon, mutta ostoskoria kirjatessa tulee jokin odottamaton virhe ja ohjelma kaatuu. Tilaus jää tilatut kansioon mutta tilauksen ostoskorin syöttö on jäänyt kesken ja tietokantojen viittaukset ovat sekaisin.
SQL komentojen varmistus
7
1046
Vastaukset
- Vasenjalkainen
Et maininnut minkälainen tietokanta tuossa on taustalla, mutta todennäköisesti tuon pystyy transaktioilla tehdä. Transaktioissa siis usean komennon nippu voidaan onnistuessa hyväksyä (COMMIT) tai peruuttaa muutokset (ROLLBACK).
Eli yksinkertainen runko tuon toteuttamiseen C#:ssä, yksityiskohtia löytyy msdn:stä, luokat SqlTransaction ja OdbcTransaction kannattaa katsoa.
try
{
// Aloita transaktio
// lisää kamaa
// Commit
}
catch (Exception e)
{
// Rollback
}- joo
tack
- 43434
Eikös toi transaktio/viite-eheys kannata tehdä tietokannassa, eikä itse scriptissä jne... joka sitä kamaa sinne tietokantaan lähettää. Tosin kaikki tietokannat eivät sitä tue.
Relaatiotietokantojen transaktiot määritellään ns. ACID-säännöstönä (Atomicity, Consistency, Isolation, Durability).
Atomicity (atomisuus): jokainen operaatio joko suoritetaan kokonaisuudessaan tai sitten sitä ei suoriteta lainkaan (jos operaatio koostuu useasta kyselystä, joko kaikki nämä kyselyt suoritetaan, tai sitten yhtään kyselyä ei suoriteta).
Consistency (oikeellisuus): transaktion jälkeen tietokanta jää oikeelliseen tilaan (mm. viiteavaineheydet ja muut rajoitteet pätevät). Transaktion sisällä tietokanta saa kuitenkin olla väliaikaisesti epäkonsistentissa tilassa
Isolation (eristys): transaktiot ovat eristettyjä toisistaan, eikä keskeneräisen transaktion tekemät muutokset näy yhdellekään muulle transaktiolle.
Durability (kestävyys): Kun transaktio on viety onnistuneesti päätökseen, sen tekemät muutokset jäävät pysyvästi tietokantaan mahdollisen ohjelmiston kaatumisen jälkeenkin.
Tos on lainaus yheltä sivulta - Vasenjalkainen
43434 kirjoitti:
Eikös toi transaktio/viite-eheys kannata tehdä tietokannassa, eikä itse scriptissä jne... joka sitä kamaa sinne tietokantaan lähettää. Tosin kaikki tietokannat eivät sitä tue.
Relaatiotietokantojen transaktiot määritellään ns. ACID-säännöstönä (Atomicity, Consistency, Isolation, Durability).
Atomicity (atomisuus): jokainen operaatio joko suoritetaan kokonaisuudessaan tai sitten sitä ei suoriteta lainkaan (jos operaatio koostuu useasta kyselystä, joko kaikki nämä kyselyt suoritetaan, tai sitten yhtään kyselyä ei suoriteta).
Consistency (oikeellisuus): transaktion jälkeen tietokanta jää oikeelliseen tilaan (mm. viiteavaineheydet ja muut rajoitteet pätevät). Transaktion sisällä tietokanta saa kuitenkin olla väliaikaisesti epäkonsistentissa tilassa
Isolation (eristys): transaktiot ovat eristettyjä toisistaan, eikä keskeneräisen transaktion tekemät muutokset näy yhdellekään muulle transaktiolle.
Durability (kestävyys): Kun transaktio on viety onnistuneesti päätökseen, sen tekemät muutokset jäävät pysyvästi tietokantaan mahdollisen ohjelmiston kaatumisen jälkeenkin.
Tos on lainaus yheltä sivultaNuo .NET:n transaktioluokat käsittääkseni käyttävät itse tietokantojen omia komentoja tuon toteuttamiseen. Eli mitään ylimääräistä päällerakennettua transaktiototeutusta ei tässä tapauksessa käytetä, jos sitä tarkoitit.
- joo
43434 kirjoitti:
Eikös toi transaktio/viite-eheys kannata tehdä tietokannassa, eikä itse scriptissä jne... joka sitä kamaa sinne tietokantaan lähettää. Tosin kaikki tietokannat eivät sitä tue.
Relaatiotietokantojen transaktiot määritellään ns. ACID-säännöstönä (Atomicity, Consistency, Isolation, Durability).
Atomicity (atomisuus): jokainen operaatio joko suoritetaan kokonaisuudessaan tai sitten sitä ei suoriteta lainkaan (jos operaatio koostuu useasta kyselystä, joko kaikki nämä kyselyt suoritetaan, tai sitten yhtään kyselyä ei suoriteta).
Consistency (oikeellisuus): transaktion jälkeen tietokanta jää oikeelliseen tilaan (mm. viiteavaineheydet ja muut rajoitteet pätevät). Transaktion sisällä tietokanta saa kuitenkin olla väliaikaisesti epäkonsistentissa tilassa
Isolation (eristys): transaktiot ovat eristettyjä toisistaan, eikä keskeneräisen transaktion tekemät muutokset näy yhdellekään muulle transaktiolle.
Durability (kestävyys): Kun transaktio on viety onnistuneesti päätökseen, sen tekemät muutokset jäävät pysyvästi tietokantaan mahdollisen ohjelmiston kaatumisen jälkeenkin.
Tos on lainaus yheltä sivultaNiin... Olin tehnyt tietokantoihini viiteavain viitteet, mutta viiteavaimet eivät estä sitä jos ostoskorin sisältö siirretään vaikka for silmukassa tietokantaan ja puolessavälissä siirtoa tapahtuu jokin virhe. Osa tuotteista menee ostoskoriin osa ei tai tilaus kirjautuu tietokantaan mutta ostoskori taas ei.
Transaktioilla selvitin onkhelman... - 43434
Vasenjalkainen kirjoitti:
Nuo .NET:n transaktioluokat käsittääkseni käyttävät itse tietokantojen omia komentoja tuon toteuttamiseen. Eli mitään ylimääräistä päällerakennettua transaktiototeutusta ei tässä tapauksessa käytetä, jos sitä tarkoitit.
Juu tuota päällekkäisyyttä tarkoitin, ei tuo C ole oikein tuttu mulle.
- simple mind
joo kirjoitti:
Niin... Olin tehnyt tietokantoihini viiteavain viitteet, mutta viiteavaimet eivät estä sitä jos ostoskorin sisältö siirretään vaikka for silmukassa tietokantaan ja puolessavälissä siirtoa tapahtuu jokin virhe. Osa tuotteista menee ostoskoriin osa ei tai tilaus kirjautuu tietokantaan mutta ostoskori taas ei.
Transaktioilla selvitin onkhelman...No miten olisi varsin simppeli ratkaisu eli että tietokannan kenttiin oletetaan arvo joka täyttyy jokatapauksessa vaikka prosessi ei täyttyisikään vaadituista kyselyistä...?
olkoon vaikka "0", joka osoittaa että prosessi on kaatunut jossain vaiheessa ja ko. tapahtuma voidaan noteerata poistona.
Siis että eka kysely aktivoi tapahtuman ja täräyttää saman tien kaikkiin kyselykenttiin oletusarvon.
olenko liian simppeli?
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
En voi jutella kanssasi
tietenkään, mutta täällä voin sanoa sinulle, että se sinun hiljaisuutesi ja herkkyytesi eivät ole heikkoutta. Ne ovat ih395150Trump ja Vance murskasivat ja nolasivat Zelenskyn tiedotusvälineiden edessä Valkoisessa talossa.
Jopa oli uskomaton tilaisuus Valkoisessa talossa. Zelensky jäi täydelliseksi lehdellä soittelijaksi suhteessa Trumpiin j5181720Kokoomus haluaa hoitaa flussat yksityisellä, jotta säästettäisiin rahaa ja aikaa
Mies hakeutui Terveystalo Kamppiin flunssaoireiden takia helmikuisena sunnuntai-iltana. Diagnoosiksi kirjattiin influens771100Rakkaus ei iloitse vääryydestä vaan iloitsee yhdessä TOTUUDEN kanssa.
Tajuatteko, että jotkut ihmiset pitävät siitä, kun toiset kaatuvat? He nauttivat siitä, kun toiset mokaavat tai käyttävä3591008- 77943
Anteeksi Pekka -vedätys
Apuna Ry:n somessa levinnyt Anteeksi Pakka -kampanja saa aina vaan kummallisempia piirteitä. ”Mä pyydän anteeksi. Mä53921- 59860
- 228814
Mikä on kaivattusi ärsyttävin piirre?
Mun kaivattu on erittäin vastahakoinen puhumaan itsestä. Kääntää puheenaiheen aina muuhun kun hänestä tulee puhetta.50803Päivi Ollila on tehnyt kunnallisvalituksen saadakseen pidettyä Tarja Pirkkalaisen virassa
Kaupunginhallituksen puheenjohtaja Päivi Ollila on tehnyt kunnallisvalituksen kaupungin johtamisjärjestelyiden muutokses58738