Conservare un riferimento a un DataSet in una pagina ASP.NET

mercoledì 21 gennaio 2009 - 11.11

Leonida Profilo | Junior Member

Ciao,

Nella mia pagina ASP.NET ho impostato due TAG asp:button e un asp:DataGrid. Il primo, crea un oggetto DataSet e lo setta con i valori caricati da un DB quando viene premuto (tutto da codice C#). Il secondo collega il mio DataSet a un DataGrid.

Dato che uscendo dal gestore dell'evento click del primo pulsante si perde il riferimento a DataSet, l'ho dichiarato come attributo della classe. Anche in questo caso si perde ogni riferimento quando la pagina viene ricaricata, allora l'ho dichiarato static.

A questo punto ho un dubbio. Se ho capito bene, un attributo static è conservato in area stack e il suo valore è comune a ogni istanza della classe nella quale è dichiarato. Ma allora questo vuol dire che chiunque si connette al server può visualizzare i contenuti del DataSet con informazioni riservate relative a un utente diverso?

Se così fosse come potrei conservare il riferimento al dataSet legandolo a un solo utente?Il codice (è un esempio per capire il funzionamento dei DataSet e DataGrid) a grandi linee è il seguente:

...

private static DataSet data;

...

protected void BCarica_Click(object sender, EventArgs e)
{
string stringaDiConnessione = "Data Source=.\\SQLEXPRESS;" +
"AttachDbFilename=|DataDirectory|\\Utenti.mdf;" +
"Integrated Security=True;" +
"User Instance=True";
string query = " SELECT * FROM Utenti ";

SqlConnection connessione = new SqlConnection(stringaDiConnessione);
SqlDataAdapter adapter = new SqlDataAdapter(query, connessione);
data = new DataSet();
adapter.Fill(data, "Utenti");

DataTable table = null;
DataColumn column = null;
DataRow row = null;

table = data.Tables["Utenti"];
column = table.Columns[0];
row = table.Rows[0];

TBNome.Text = row[column].ToString();
}

protected void BVisualizza_Click(object sender, EventArgs e)
{
GVUtenti.DataSource = data;
GVUtenti.DataBind();

}


rossimarko Profilo | Guru

Ciao,

ogni post che fai alla pagina è una richiesta a se stante quindi le variabili in memoria vengono perse. Per salvare dei dati tra un post e l'altro hai vari strumenti: http://msdn.microsoft.com/en-us/library/75x4ha6s.aspx

Per quanto riguarda i daset potresti salvarlo nella session o nella cache con una chiave differente per ogni utente.

Ovviamente occhio alla dimensione del dataset perchè comunque sono dati che rimangono in memoria e quindi se hai tanti accessi occupi tanta ram

-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Leonida Profilo | Junior Member

Mmmh scusa ma non ho mai usato le variabili di sessione, non è tanto che lavoro su .NET. In pratica potrei creare una variabile DataSet con altre variabili che potrebbero essere per esempio i dati di accesso al sito di un utente e fare un controllo ad ogni accesso al DS giusto?

La stessa cosa può essere fatta anche per caricare il back-office o il front-office a seconda dell'utente, al caricamento di ogni pagina? Scusa se approfitto di questo thread per chiedertelo ma visto che si è parlato di sessione colgo la palla al balzo...anche perchè sto innondando di thread il forum da un po di giorni...sto seppellendo le richieste di altri utenti...poveracci!!!

rossimarko Profilo | Guru

La sessione è una collection all'interno del quale puoi inserire vari oggetti.

Se nella tua pagina scrivi Session.Add() vedrai che il metodo ti consentirà di inserire dei valori.
Per accedere ad uno di questi puoi scrivere Session("NomeChiave").

La session si riferisce all'utente loggato ed è valida solo per il sito corrente.

La cache invece è unica per tutti gli utenti e puoi accederci da ogni pagina scrivendo Cache.
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Leonida Profilo | Junior Member

Ok, grazie, sei stato molto chiaro, approfondisco su MSDN
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5