Connessione al db (una sola per tutto)

lunedì 03 novembre 2008 - 21.14

Anonimo Profilo | Senior Member

Salve, mi sapete dire come faccio ad fare una sola conessione al db mysql con odbc,
senza che tutte le volte devo scrivere la stringa di conessione e la configurazione del web.config.

grazie.

Io per adesso faccio cosi:

c'è qualche modo per fare che rimanga solo una connessione per tutto.?.

grazie.

using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Configuration; using System.Data; using System.Data.Odbc; public partial class MasterPage : System.Web.UI.MasterPage { String connectionString = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString; protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) LoadDatabase_Link(); } private void LoadDatabase_Link() { string sqlCmd; DataSet ds = new DataSet(); sqlCmd = "SELECT " + " * " + " FROM Link"; OdbcConnection dbConn = new OdbcConnection(connectionString); OdbcDataAdapter myAdapter = new OdbcDataAdapter(sqlCmd, connectionString); dbConn.Open(); myAdapter.Fill(ds); myRepeater.DataSource = ds; myRepeater.DataBind(); dbConn.Close(); } }

luigidibiasi Profilo | Guru

Ti dico come faccio io quando ho la possibilità ( e quando devo sbrigarmi )

Puoi pensare di aprirti una connessione nel load della master page ( o nel file global.asax ) e successivamente salvarti questa connessione
in una variabile con scope application. ( application.add(mysqlconn))
Luigi Di Biasi

alx_81 Profilo | Guru

>Salve,
Ciao!

>mi sapete dire come faccio ad fare una sola conessione
>al db mysql con odbc, senza che tutte le volte devo scrivere la stringa di conessione
>e la configurazione del web.config.
Distinguiamo i due problemi:

1) Non ripetere sempre la connection string
2) Fare una sola connessione

1) Questo problema è facilmente risolvibile scrivendo classi e definendo più livelli (modularità anche).
Quindi dovresti pensare ad una classe che ti permetta di gestire le connessioni alal quale non passi la connectionstring ma che se la vada a leggere con il System.Configuration dal web.config.
Qui hai un semplice esempio:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=26189

2) Perchè vuoi fare sul web una sola connessione aperta? E se l'utente chiude il browser mentre è ancora aperta? Sinceramente sul web non mi piace l'idea di tenere aperta una connessione in application..
Anzi, preferisco aprire e chiuderle ad ogni comando. Considera che ogni connessione che viene "aperta" viene presa da un pool di connessioni già "pronte" e quindi l'operazione non è pesante.
Ti faccio un esempio di stringa di connessione che usa il pool:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Leggi qui per maggiori info:

OLE DB, ODBC, and Oracle Connection Pooling (ADO.NET)
http://msdn.microsoft.com/en-us/library/ms254502.aspx

@luigidibiasi
Occhio, non è un client server, e la pratica seguita da te non è decisamente consigliabile

>grazie.
di nulla!
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Anonimo Profilo | Senior Member

graizie a tutti,

ora me lo studio e poi vi faccio sapere, come è andata.

vi saluto.
e buona giornata.

Anonimo Profilo | Senior Member

ciao alx_81,
ho fatto come c'è scritto nell'altro post....
però a me me sembra come prima perchè instanzi ogni volta la classe quindi un'altra conessione, come cavolo faccio con visual studio 2008 express avere una conessione sola che mi funzionasse senza errori se non instanzo la classe ....

ecco il codice:
classe _databaseacess:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

e questo lo richiamo:
_baseDataAccess db = new _baseDataAccess(); private void LoadDatabase_Link() { // apro la connessione OdbcConnection objConnection = db.OpenConnection(); OdbcCommand objCommand = db.GetCommand(); objCommand.CommandText = "SELECT * FROM Link"; try { DataTable dt = new DataTable(); OdbcDataAdapter da = new OdbcDataAdapter(objCommand); da.Fill(dt); myRepeater.DataSource = dt; myRepeater.DataBind(); } catch (Exception ex) { Response.Write("" + ex.ToString() + ""); } finally { //chiudo la connessione db.CloseConnection(); } }

mi dici come fare , grazie che sto pazzendo con questo .net.

ciao.
e grazie . buona giornata o serata. a domani verso le 13:00.
ciao.

alx_81 Profilo | Guru

>ho fatto come c'è scritto nell'altro post....
>però a me me sembra come prima perchè instanzi ogni volta la
>classe quindi un'altra conessione, come cavolo faccio con visual
>studio 2008 express avere una conessione sola che mi funzionasse
>senza errori se non instanzo la classe ....
Da codice istanzio una nuova connessione, ok, ma è presa da un pool, non succede nulla, va bene così.
Non puoi pensare sul web di fare una connessione sola sempre aperta, non è proprio il metodo da seguire.
Sul web sono meglio tante chiamate piccole e snelle.
Non spaventarti del fatto che si istanzino nuove connessioni. Asp.net gestisce un pool ottimizzato proprio per questo.

>e grazie . buona giornata o serata. a domani verso le 13:00.
Di nulla!

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Anonimo Profilo | Senior Member

ok, si ma non è che faccio pesantire il server? ...

fai conto che sono in hosting condiviso e lunico modo che ho come connessione e odbc per usare mysql...

tanto apena trovero un lavoro a tempo pieno mi comprero un server tutto mio.

perchè adesso faccio un Inserimento socio Lavorativo con ASL 1,

e mi danno solo pochi soldi al mese (rimborso spese), e per quello prendo solo l'hosting condiviso che è una rottura però c'è la facciao ad acquistare l'hosting.

Quindi se mi dici che va bene cosi, allora mi fido.
grazie , mille
e buona giornata.

alx_81 Profilo | Guru

>ok, si ma non è che faccio pesantire il server? ...
No, ti ripeto.. c'è un pool ottimizzato..
se ritieni che ti sia stato di aiuto, accetta la risposta così chiudiamo il thread..

>grazie , mille
Di nulla!
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5