SQL komentojen varmistus

joo

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.

7

1064

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • 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ä sivulta

        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.


      • 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ä sivulta

        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...


      • 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

    1. Laitetaas nyt kirjaimet tänne

      kuka kaipaa ja ketä ?
      Ikävä
      149
      10901
    2. Pieni häivähdys sinusta

      Olet niin totinen
      Ikävä
      52
      5200
    3. Taas ryssittiin oikein kunnolla

      r….ä hyökkäsi Viroon sikaili taas ajattelematta yhtään mitään https://www.is.fi/ulkomaat/art-2000011347289.html
      NATO
      45
      2413
    4. Missä olet ollut tänään kaivattuni?

      Ikävä sai yliotteen ❤️ En nähnyt sua tänään söpö mies
      Ikävä
      30
      2113
    5. Vanha Suola janottaa Iivarilla

      Vanha suola janottaa Siikalatvan kunnanjohtaja Pekka Iivaria. Mies kiertää Kemijärven kyläjuhlia ja kulttuuritapahtumia
      Kemijärvi
      13
      1681
    6. Valtimon Haapajärvellä paatti mäni nurin

      Ikävä onnettomuus Haapajärvellä. Vene hörpppi vettä matkalla saaren. Veneessä ol 5 henkilöä, kolme uiskenteli rantaan,
      Nurmes
      42
      1514
    7. Tiedän kuka sinä noista olet

      Lucky for you, olen rakastunut sinuun joten en reagoi negatiivisesti. Voit kertoa kavereillesi että kyl vaan, rakkautta
      Ikävä
      30
      1221
    8. Känniläiset veneessä?

      Siinä taas päästiin näyttämään miten tyhmiä känniläiset on. Heh heh "Kaikki osalliset ovat täysi-ikäisiä ja alkoholin v
      Nurmes
      35
      1166
    9. Daniel Nummelan linjapuhe 2025

      Kansanlähetyksen toiminnanjohtajan Daniel Nummelan linjapuhe tänään. Rehellistä analyysiä mm. evlut kirkosta ja piispo
      Luterilaisuus
      92
      925
    10. TÄSTÄ TAITAA TULLA SUOMEN HISTORIAN SUURIN USKONNONVAPAUDEN OIKEUDENKÄYNTI.

      Sinun täytyy hyväksyä se että jos sinä vetoat uskonnonvapauteen, silloin sinun tulee antaa myös muille vastaava vapaus o
      Hindulaisuus
      317
      882
    Aihe