Visualizzazione dei risultati da 1 a 8 su 8

Discussione: ritorno di un booleano

  1. #1
    Utente di HTML.it L'avatar di kobe83
    Registrato dal
    Sep 2008
    Messaggi
    89

    ritorno di un booleano

    Ciao a tutti!
    Ho la seguente function, il mio problema è che mi ritorna sempre true..
    Function controlla_login(ByVal user As String, ByVal pass As String) As Boolean
    connetti_database()

    Try
    Dim ds As DataSet = New DataSet
    Dim dbda As MySqlDataAdapter = New MySqlDataAdapter
    dbda.SelectCommand = New MySqlCommand("select user,pass from userpass where user='" & (user) & "' and pass='" & (pass) & "'", conn)
    dbda.Fill(ds)
    ds = Nothing
    Return True
    Catch ex As Exception
    Response.Write(ex.Message)
    Return False
    End Try
    disconnetti_database()
    End Function
    Invece io vorrei far ritornare un true se i campi che cerco esistono, false altrimenti.
    Non ce la posso fare, avete un consiglio? Molte grazie
    :master:

  2. #2
    Intanto un consiglio sulla chiusura del database: quando utilizzi la funzione Return, il ciclo esce dalla routine corrente, pertanto la tua sub di chiusura non verrebbe mai eseguita.

    Per fare quanto chiedi, non dovresti controllare se ci sono o meno degli errori in apertura del recordset, perchè anche un recordset vuoto è pur sempre una richiesta legittima. Il "false", verrebbe ritornato soltanto se, per farti un esempio, non ci fosse la tabella "userpass".

    In sostanza, dopo la chiamata di connessione al database, potresti contare il numero di record restituiti dalla tua funzione, e se è zero, ritornare false.

    Fammi sapere se ti servono più info.
    SoloVangelo.it - Uno sguardo al mondo con gli occhi della fede
    «Dio ha tanto amato il mondo, che ha dato il suo unigenito Figlio, affinché chiunque crede in lui non perisca, ma abbia vita eterna.» (Gv.3:16-17)

  3. #3
    Utente di HTML.it L'avatar di kobe83
    Registrato dal
    Sep 2008
    Messaggi
    89
    Ciao!
    Innanzitutto ti ringrazio per la risposta, mi hai chiarito un concetto al quale non sarei mai potuto arrivare da solo. L'unica informazione che ti chiedo in più è in che modo posso contare i record che mi vengono restituiti dalla funzione. può funzionare cosi?

    select SQL_CALC_FOUND_ROWS user, pass from userpass where bla bla bla....

    Nel caso andasse bene, una volta ottenuto il numero di righe, come faccio il confronto?
    Posso usare "Select FOUND_ROWS()" ?
    in ogni caso rimane il dubbio... come faccio in vb a dire se le righe sono pari a zero ritorna false?

  4. #4
    Puoi farlo con una semplice istruzione, da inserire subito dopo dbda.Fill(ds)
    Il tuo dataset ds conterrà tutte le informazioni che ti servono perchè gliele hai appena passate tramite Fill, e con il metodo ds.Tables[0].Rows.Count puoi estrarre il numero di records presenti.

    Pertanto, il codice di cui hai bisogno dovrebbe assomigliare più o meno al seguente:

    codice:
    Dim noRecords as Boolean     ' Nuova var. che ci informerà sullo stato del recordset
    
    Dim ds As DataSet = New DataSet
    Dim dbda As MySqlDataAdapter = New MySqlDataAdapter
    dbda.SelectCommand = New MySqlCommand("select user,pass from userpass where user='" & (user) & "' and pass='" & (pass) & "'", conn)
    
    dbda.Fill(ds)
    If ds.Tables[0].Rows.Count = 0 then   ' Se non ci sono records, valorizza a False
       noRecords = False
    Else
       noRecords = True
    End If
    disconnetti_database()   ' Disconnetti prima del Return
    Return noRecords
    Ovviamente, se lo desideri, puoi mantenere il trapping di eventuali errori.
    Fammi sapere se è tutto ok.

    Ciao
    SoloVangelo.it - Uno sguardo al mondo con gli occhi della fede
    «Dio ha tanto amato il mondo, che ha dato il suo unigenito Figlio, affinché chiunque crede in lui non perisca, ma abbia vita eterna.» (Gv.3:16-17)

  5. #5

  6. #6
    Utente di HTML.it L'avatar di kobe83
    Registrato dal
    Sep 2008
    Messaggi
    89
    Ho risolto!
    Ho fatto solo una piccola modifica la tuo codice, invece che le parentesi quadre andavano le parentesi tonde in ds.Tables[0].Rows.Count = 0

    Grazie davvero

    Per gibra: che differenza ci sarebbe con l'utilizzo di un datareader?


    Originariamente inviato da JackInTheBox
    Puoi farlo con una semplice istruzione, da inserire subito dopo dbda.Fill(ds)
    Il tuo dataset ds conterrà tutte le informazioni che ti servono perchè gliele hai appena passate tramite Fill, e con il metodo ds.Tables[0].Rows.Count puoi estrarre il numero di records presenti.

    Pertanto, il codice di cui hai bisogno dovrebbe assomigliare più o meno al seguente:

    codice:
    Dim noRecords as Boolean     ' Nuova var. che ci informerà sullo stato del recordset
    
    Dim ds As DataSet = New DataSet
    Dim dbda As MySqlDataAdapter = New MySqlDataAdapter
    dbda.SelectCommand = New MySqlCommand("select user,pass from userpass where user='" & (user) & "' and pass='" & (pass) & "'", conn)
    
    dbda.Fill(ds)
    If ds.Tables[0].Rows.Count = 0 then   ' Se non ci sono records, valorizza a False
       noRecords = False
    Else
       noRecords = True
    End If
    disconnetti_database()   ' Disconnetti prima del Return
    Return noRecords
    Ovviamente, se lo desideri, puoi mantenere il trapping di eventuali errori.
    Fammi sapere se è tutto ok.

    Ciao

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Ricordo all'autore che il regolamento prevede che il linguaggio venga indicato (oltre che nella discussione dove non appare mai) anche nel titolo (e nemmeno qui c'è)...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it L'avatar di kobe83
    Registrato dal
    Sep 2008
    Messaggi
    89

    Re: Moderazione

    Caspita puoi anche darmi del "tu", invece che appellarmi come "l'autore".
    In ogni caso chiedo scusa, non avevo letto il regolamento quindi sono in torto.

    Purtroppo però adesso non posso modificare il titolo. La prossima volta ci starò più attento.

    Ciao!



    Originariamente inviato da LeleFT
    Ricordo all'autore che il regolamento prevede che il linguaggio venga indicato (oltre che nella discussione dove non appare mai) anche nel titolo (e nemmeno qui c'è)...


    Ciao.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.