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

1083

    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. Sannan kirja USA:n bestseller!

      "Congratulations to Sanna Marin's HOPE IN ACTION, officially a USA TODAY bestseller!" Kertoo Scribner. Mitäs persut tä
      Maailman menoa
      207
      11923
    2. Oikeistolainen luki Med mod att leda : en biografi

      ...ei tykänny Sanna Marinista
      Maailman menoa
      29
      8218
    3. Metsäalan rikolliset

      Jokohan alkaa vähitellen kaatua kulissit näillä ihmiskauppaa harjoittavilla firmoilla.
      Sotkamo
      59
      6333
    4. Ruotsalaistoimittaja: "Sanna Marinin saunominen saa minut häpeämään"

      Sanna Marinin kirja saa täyslaidallisen ruotsalaislehti Expressenissä perjantaina julkaistussa kolumnissa.....voi itku..
      Maailman menoa
      177
      5257
    5. Hyvää syntymäpäivää Sanna 40 vee!!!!

      ᕼᗩᑭᑭY ᗷIᖇTᕼᗞᗩY Sister ❣️🥰 🎉🎂✨🍰🥳 🥳🎂🥂 🎉🎊🎁🎈🎂
      Maailman menoa
      57
      4978
    6. Suomen kaksikielisyys - täyttä huuhaata

      Eivätkö muuten yksilöt pysty arvioimaan mitä kieliä he tarvitsevat? Ulkomaalaiselle osaajalle riittää Suomessa kielitai
      Maailman menoa
      50
      4518
    7. Työeläkeloisinta 27,5 mrd. per vuosi

      Tuo kaikki on pois palkansaajien ostovoimasta. Ja sitten puupäät ihmettelee miksei Suomen talous kasva. No eihän se kas
      Maailman menoa
      119
      4441
    8. Missä vaiheessa

      Päätit luovuttaa suhteeni?
      Ikävä
      119
      3936
    9. Juuri muiston ne

      Rakastuneet katseesi. Huh
      Ikävä
      82
      3425
    10. Miten paljon

      Olet halunnut mun kanssa?
      Ikävä
      53
      1967
    Aihe