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

1035

    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. Mies kateissa Lapualla

      Voi ei taas! Toivottavasti tällä on onnellinen loppu. https://poliisi.fi/-/mies-kateissa-lapualla
      Lapua
      115
      5965
    2. Poliisi tutkii murhaa Paltamossa

      Poliisi tutkii Kainuussa sijaitsevassa Paltamon kunnassa epäiltyä henkirikosta, joka on tapahtunut viime viikon perjanta
      Paltamo
      32
      4067
    3. Olenko joka hetki

      Ajatuksissasi?
      Ikävä
      82
      3352
    4. Jos me voitais puhua

      Jos me voitais puhua tästä, mä sanoisin, että se on vaan tunne ja se menee ohi. Sun ei tarvitse jännittää mua. Mä kyllä
      Ihastuminen
      18
      2986
    5. Jenna meni seksilakkoon

      "Olen oppinut ja elän itse siinä uskossa, että feministiset arvot omaava mies on tosi marginaali. Todennäköisyys, että t
      Maailman menoa
      252
      2054
    6. Joo nyt mä sen tajuan

      Kaipaan sua, ei sitä mikään muuta ja olet oikea❤️ miksi tämän pitää olla niin vaikeaa?
      Ikävä
      88
      2004
    7. Mikä sinua ja

      kaivattuasi yhdistää ?
      Ikävä
      143
      1795
    8. Jere, 23, ja Aliisa, 20, aloittavat aamunsa Subutexilla tai rauhoittavilla: "Vaikka mä käytän..."

      Jere, 23, ja Aliisa, 20, ovat pariskunta, joka aloittaa aamunsa Subutexilla tai rauhoittavilla. Jere on ollut koko aikui
      Maailman menoa
      43
      1787
    9. Olipa ihana rakas

      ❤️🤗😚 Toivottavasti jatkat samalla linjalla ja höpsöttelykin on sallittua, kunhan ei oo loukkaavaa 😉 suloisia unia kau
      Ikävä
      8
      1696
    10. Vain yksi elämä

      Jonka haluaisin jakaa sinun kanssasi. Universumi heitti noppaa ja teki huonon pilan, antoi minun tavata sinut ja rakastu
      Ikävä
      88
      1569
    Aihe