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!)
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?
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.
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.
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.
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.