Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C#: Pitääkö tietokantayhteys joka välissä sulkea?

Jonne [26.07.2013 16:48:31]

#

Kun olen koodaillut C# erästä palvelin ohjelmaa, luon ohjelmaa käynnistäessä tietokanta yhteyden, jota sitten käytetään jatkuvasti.

Onko tämä tapa "väärä", eli pitäisikö se joka kerta luoda uudelleen ja sulkea, kun kysely on suoritettu?

(Mod. teki uuden aiheen. Älä lähettele kysymyksiä ihan eri keskuteluihin!)

vesikuusi [26.07.2013 17:07:15]

#

Ei ole mitään yleispätevää syytä sulkea yhteyttä jokaisen kyselyn välissä. Kuitenkin, jos DSN:ää pitää muuttaa jossain vaiheessa, voi yhteyden sulkeminen ja avaaminen uudelleen olla perusteltua.

Lisäys: Tarkoitatko "palvelin ohjelma":lla Apachen kaltaista ohjelmistoa vai ohjelmaa, joka käyttää tietokantapalvelinta?

Grez [26.07.2013 22:30:39]

#

Luulisin, että palvelinohjelmalla tarkoitetaan ohjelmaa, jota ajetaan palvelimella (siis ei esimerkiksi työpöytäohjelma).

Mielestäni kysymyksessä on itsestäänselvää, että kyseessä on ohjelma joka käyttää tietokantapalvelinta.

Jonne [27.07.2013 03:39:26]

#

Tämä keskustelu siirrettiin ja pääpointti meni vähän sitämyöten hukkaan. :)
linkki

Eli aloin aprikoimaan, että voiko lastInsertId olla epäluotettava, mikäli sovelluksen alussa luodan tietokanta yhteys ja sitä sitten käytetään jokaikiseen kyselyyn ja kaikille käyttäjille.
Sen sijaan, että yhdelle käyttäjälle luotua tietokantayhteyttä siirreltäisiin funktiosta toiseen, tällä hetkellä käytän sitä globaalisti.

The Alchemist [27.07.2013 08:58:01]

#

Miksi se olisi epäluotettava?

Onhan se nyt joka tapauksessa väärin huudella lastInsertId():tä jossei ole suorittanut lainkaan inserttiä ensin. Veikkaisin myös, ettei käyttämäsi tietokantakirjasto ole thread-safe, joten et voisi kuitenkaan käpistellä yhteyttä useasta säikeestä samanaikaisesti, jolloin korruptoituminen siitä syystä on mahdotonta.

Metabolix [27.07.2013 11:49:45]

#

Jonne kirjoitti:

Tämä keskustelu siirrettiin ja pääpointti meni vähän sitämyöten hukkaan. :)

Pääpointin säilymistä olisi auttanut, jos olisit edes maininnut kysymyksessäsi sen lastInsertId:n. Nythän kysymyksesi näyttää joltain ihan muulta: kysyt vain, saako yhdellä tietokantayhteydellä ajaa monta kyselyä.

Jonne kirjoitti:

Eli aloin aprikoimaan, että voiko lastInsertId olla epäluotettava, mikäli sovelluksen alussa luodan tietokanta yhteys ja sitä sitten käytetään jokaikiseen kyselyyn ja kaikille käyttäjille.

Millä tavalla se olisi epäluotettava? Se palauttaa täysin luotettavasti sen id:n, joka on viimeksi lisätty INSERT-kyselyllä kyseisen tietokantayhteyden kautta – toki riippuen tietokantapalvelimesta; eihän kaikissa välttämättä edes ole tällaista mahdollisuutta. Mikä tässä mielestäsi voisi muuttua epäluotettavaksi ja minkä takia?

Ainoat epäluotettavuudet tulevat omasta koodistasi. Koodi toimii, jos kutsut lastInsertId:tä aina heti INSERT-kyselyn jälkeen etkä sähellä säikeillä. Jos taas ajat välissä toisen INSERT-kyselyn, tietenkin peli on menetetty.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta