Ciao a tutti, come posso verificare se un'operazione su un datarow ha portato ad elemento oppure se il datarow è vuoto?
DataRow r = tblUtenti.webutenti.Select(qrySelect)[0];
if // Se è PIENO... come lo verifico??
{
}
Ciao a tutti, come posso verificare se un'operazione su un datarow ha portato ad elemento oppure se il datarow è vuoto?
DataRow r = tblUtenti.webutenti.Select(qrySelect)[0];
if // Se è PIENO... come lo verifico??
{
}
if(r != null) ....
pero' prima di arrivare li ti ritrovi con una bella object null reference exception
Una domanda: perche' per filtrare le righe non usi la dataview che e' li apposta?
Saluti a tutti
Riccardo
Grazie per la risposta! Scusa ma non ho capito il discorso dell'object, come devo gestire la mia riga e cosa c'entra l'eccezione?? Potresti farmi un esempio???
questa riga di codiceOriginariamente inviato da Valeria75_bis
non ho capito il discorso dell'object, come devo gestire la mia riga e cosa c'entra l'eccezione?? Potresti farmi un esempio???
nella parte in neretto provoca una exception se la funzione Select non ritorna nessuna datarow.DataRow r = tblUtenti.webutenti.Select(qrySelect)[0];
Detto questo, puoi rispondere alla mia domanda? Come mai per filtrare le datarow di una datatable non usi una dataview?
Saluti a tutti
Riccardo
Dalla tua risposta non ho ancora capito come risolvere il problema... OK genera un'exception lo [0] ...ma come risolvo il mio problema iniziale??
Per quanto riguarda la tua domanda, sinceramente mi stavo basando su un esempio trovato in rete.... io praticamente sto usando un dataset tipizzato che "alimento" poi "filtro" sulla base di un parametro ... forse sbaglio?? in caso affermantivo, qualunque consiglio sulla soluzione migliore è ben accetto.
Posto il mio codice:
Codice PHP:
dbm = dbConnection.OpenDB();
dbm.DatabaseDisconnesso = tblUtenti;
//Vengono caricati i dati nel DataSet
qrySelect = "SELECT * FROM webutenti";
dbm.CaricaTabella(tblUtenti.webutenti, qrySelect, true);
//Viene ricercato l'utente
qrySelect = "login ='" + tbAccessoLogin.Text + "' and password ='" + tbAccessoPassword.Text + "'";
DataRow r = tblUtenti.webutenti.Select(qrySelect)[0];
if // qui devo fare il controllo sull'oggetto, ho notato che a volte mi va in errore
{
//Utente non trovato
}
Se il mio codice è migliorabile o, peggio ancora, sbagliato... potresti suggerirmi una strada migliore?
Grazie
il codice che dici di aver trovato e' piuttosto brutto detto con un eufemismo gentile
Dando per scontato che l'oggetto tblUtenti sia un dataset (e quindi sarebbe piu' intuitivo chiamarlo dsUtenti) e tblUtenti.webutenti sia una datatable correttamente istanziata
Codice PHP:
tblUtenti.webutenti.DefaultView.RowFilter = string.Format("login ='{0}' and password ='{1}'", tbAccessoLogin.Text, tbAccessoPassword.Text);
if (dt.DefaultView.Count == 1)
{
// Utente trovato
}
else
{
// Utente non trovato
}
Saluti a tutti
Riccardo
Grazie infinite per l'aiuto!
Ti chiedo un ultimo suggerimento: è giusto caricare prima nel dataset TUTTI i records e poi filtrarli (come faccio io)?? Oppure esiste una soluzione piu corretta??
Grazie
la risposta e' abbastanza ovvia. E' giusto caricare solo il minimo indispendabile dei dati. Quindi se devi solo verificare che ci sia un record in una tabella tanto meglio fare un SELECT COUNT(*) WHERE ..... e vedere se torna 1 o 0. Se invece devi anche mantenere i dati da qualche parte ma sempre e solo di un record non ha senso caricare tutti i record e poi filtrare per trovarne uno. Meglio caricare solo quello.
Detto questo, per gestire l'autenticazione degli utenti, come mi sembra di aver detto gia a te in un altro thread, dovresti utilizzare le classi che asp.net e il framework ti mettono a disposizione. Anche nel caso in cui hai gia' un db che ' diverso da quello proposto in automatico, non e' difficile implementare il proprio custom membership provider.
All'inizio puo' sembrarti difficile ma poi tutto in realta' diventa piu' semplice che non usare session, dataset, dataview e compagnia bella.
Saluti a tutti
Riccardo
Grazie per la risposta, quindi per il caricamento dei dati nel dataset potrei non fare una select * ma applicare subito la select filtrata sull'utente?? (e non fare i due processi: caricamento di tutti i dati nel dataset e successivamente filtro sul dataset)
quindi piuttosto che fare
qrySelect = "SELECT * FROM webutenti";
dbm.CaricaTabella(tblUtenti.webutenti, qrySelect, true);
//Viene ricercato l'utente
qrySelect = "login ='" + tbAccessoLogin.Text + "' and password ='" + tbAccessoPassword.Text + "'";
DataRow r = tblUtenti.webutenti.Select(qrySelect)[0];
potre fare subit
qrySelect = "SELECT * FROM webutenti WHERE login ......"
dbm.CaricaTabella(tblUtenti.webutenti, qrySelect, true);
DataRow r = tblUtenti.webutenti.Select(qrySelect)[0];
E' corretto???
In caso affermativo come potrei applicare la tua soluzione (webutenti.DefaultView.RowFilter....) in questo contesto appena esposto??
Grazie ancora!
Che senso ha utilizzare un dataset per leggere un record?
Il dataset e' uno degli oggetti piu' pesanti nel framework, in sintesi e' un contenitore di tabelle (e datarelations). Se hai bisogno di usare una datatable per contenere un record, usa direttamente una datatable (tipizzato o no).
Se nella query fai una selezione che in caso positivo deve restituire 1 record per sapere se il record c'e' ti basta fare
if(tuadatatable.rows.count() == 0)
// utente non trovato
else
// utente trovato
Saluti a tutti
Riccardo