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
1061
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
Poliisi: Kymmenhenkinen pohjalaisperhe ollut vuoden kateissa kansainvälinen etsintäkuulutus Poliis
Poliisi: Kymmenhenkinen pohjalaisperhe ollut vuoden kateissa – kansainvälinen etsintäkuulutus Poliisi pyytää yleisön apu3092788Tässä totuus jälleensyntymisestä - voit yllättyä
Jumalasta syntyminen Raamatussa ei tässä Joh. 3:3. ole alkukielen mukaan ollenkaan sanaa uudestisyntyminen, vaan pelkä3011433- 1081271
En kadu sitä, että kohtasin hänet
mutta kadun sitä, että aloin kirjoittamaan tänne palstalle. Jollain tasolla se saa vain asiat enemmän solmuun ja tekee n831261Noniin rakas
Annetaanko pikkuhiljaa jo olla, niin ehkä säilyy vienot hymyt kohdatessa. En edelleenkään halua sulle tai kenellekään mi991255Oisko mitenkään mahdollisesti ihan pikkuisen ikävä..
...edes ihan pikkuisen pikkuisen ikävä sulla mua??.. Että miettisit vaikka vähän missähän se nyt on ja oiskohan hauska n581205- 471087
Helena Koivu : Ja kohta mennään taas
Kohta kohtalon päivä lähestyy kuinka käy Helena Koivulle ? Kenen puolella olet? Jos vastauksesi on Helenan niin voisi75996Au pair -työ Thaimaassa herättää kiivasta keskustelua somessa: "4cm torakoita, huumeita, tauteja..."
Au pairit -sarjan uusi kausi herättää keskustelua Suomi24 Keskustelupalvelussa. Mielipiteitä ladataan puolesta ja vastaa23911- 33817