Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di mexican
    Registrato dal
    Oct 2001
    residenza
    cava de tirreni
    Messaggi
    3,541

    problema su record while

    Allora io faccio una query e vorrei sapere se mi trova un record corrispondente ed eseguire un'operazione altrimenti un'altra come devo fare?IO ho questo codice:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    connetti()
    strsql = "Select * from Utenti where username='" & username.Text & "' and passwd='" & passwd.Text & "'" cmdSql = New OleDbCommand(strsql, conn)
    rs = cmdSql.ExecuteReader()
    While rs.Read()
    'qui cosa devo fare?
    End While
    rs.Close()

    'se mi trova l'utente nel DB vorrei fare questo:
    Session("admin") = "ok"
    Response.Redirect("menu.aspx")
    'altrimenti questo
    Else
    messaggio.Text = "Password o Username errati."
    End If
    conn.Close()
    End Sub

    Grazie a tutti in anticipo.

  2. #2
    invece di fare select * from e poi istanziare un datareader e leggerne il valore (nel tuo caso comunque basterebbe un if tuodr.hasrows ) puoi fare un select count(*) from . In questo modo, la query ritornerebbe sempre e solo 1 singolo valore (1 o + se c'e' qualcosa oppure 0). Come si fa ad usare un risultato che sappiamo essere costituito da una sola colonna? usando la funzione ExecuteScalar del command. Quindi
    codice:
    connetti() 
    strsql = "Select COUNT(*) from Utenti where username=? and passwd=?" 
    cmdSql = New OleDbCommand(strsql, conn) 
    cmdSql.Parameters.Add(usa i parametri e non incollare stringhe nelle query)
    dim res as integer = cmdSql.ExecuteScalar 
    if res > 0 then 
    ' ti ho trovato
    end if
    Saluti a tutti
    Riccardo

  3. #3
    Utente di HTML.it L'avatar di mexican
    Registrato dal
    Oct 2001
    residenza
    cava de tirreni
    Messaggi
    3,541

    scusa

    Originariamente inviato da riccardone
    invece di fare select * from e poi istanziare un datareader e leggerne il valore (nel tuo caso comunque basterebbe un if tuodr.hasrows ) puoi fare un select count(*) from . In questo modo, la query ritornerebbe sempre e solo 1 singolo valore (1 o + se c'e' qualcosa oppure 0). Come si fa ad usare un risultato che sappiamo essere costituito da una sola colonna? usando la funzione ExecuteScalar del command. Quindi
    codice:
    connetti() 
    strsql = "Select COUNT(*) from Utenti where username=? and passwd=?" 
    cmdSql = New OleDbCommand(strsql, conn) 
    cmdSql.Parameters.Add(usa i parametri e non incollare stringhe nelle query)
    dim res as integer = cmdSql.ExecuteScalar 
    if res > 0 then 
    ' ti ho trovato
    end if
    Cosa vuoi dire? non ho capito cosa devo mettere nelle parentesi
    (usa i parametri e non incollare stringhe nelle query)

  4. #4

    Re: scusa

    Originariamente inviato da mexican
    Cosa vuoi dire?
    Invece di incollare stringhe nelle query, usa i parametri. I parametri diminuiscono il rischio di sqlinjection (utenti malintenzionati che distruggono o leggono il database incollando comandi sql nelle stringhe) ed evitano problemi con il formato dei dati ad es. in presenza di date o decimali.
    non ho capito cosa devo mettere nelle parentesi
    (usa i parametri e non incollare stringhe nelle query)
    codice:
    tuocommand.Parameters.Add("?", System.Data.OleDb.OleDbType.VarChar).Value = tuatextboxusername.text 
    tuocommand.Parameters.Add("?", System.Data.OleDb.OleDbType.VarChar).Value = tuatextboxpassword.text
    Saluti a tutti
    Riccardo

  5. #5
    Utente di HTML.it L'avatar di mexican
    Registrato dal
    Oct 2001
    residenza
    cava de tirreni
    Messaggi
    3,541

    ho fatto così ma...

    connetti()
    strsql = "Select id_utente from Utenti where username='username' and passwd='passwd'"
    cmdSql = New OleDbCommand(strsql, conn)
    cmdSql.Parameters.Add("username", System.Data.OleDb.OleDbType.VarChar).Value = username.Text)' qui mi dice che è prevista fine istruzione come mai??? cmdSql.Parameters.Add("passwd", System.Data.OleDb.OleDbType.VarChar).Value = passwd.Text)
    '(usa i parametri e non incollare stringhe nelle query)
    Dim res As Integer = cmdSql.ExecuteScalar
    If res > 0 Then
    Session("id_utente") = rs("id_utente")
    Response.Redirect("menu.aspx")
    Else
    messaggio.Text = "Password o Username errati."
    End If
    rs = cmdSql.ExecuteReader()

    rs.Close()
    conn.Close()

  6. #6

    Re: ho fatto così ma...

    Originariamente inviato da mexican
    .Text) ' qui mi dice che è prevista fine istruzione come mai???
    Forse xche' c'e' quella parentesina che gli da uzzo? consiglierei di non postare subito una richiesta di aiuto per ogni errore o almeno non prima di aver provato a fare un po' di debug.
    Saluti a tutti
    Riccardo

  7. #7
    Utente di HTML.it L'avatar di mexican
    Registrato dal
    Oct 2001
    residenza
    cava de tirreni
    Messaggi
    3,541

    Re: Re: ho fatto così ma...

    Originariamente inviato da riccardone
    Forse xche' c'e' quella parentesina che gli da uzzo? consiglierei di non postare subito una richiesta di aiuto per ogni errore o almeno non prima di aver provato a fare un po' di debug.
    si scusami non avevo notato che la parentesi dell'add era già chiusa!!! chiedo venia, ma essendo un metodo non ho mai usato pensavo che sbagliavo mettere codice

  8. #8
    Utente di HTML.it L'avatar di mexican
    Registrato dal
    Oct 2001
    residenza
    cava de tirreni
    Messaggi
    3,541

    qualcosa non va

    Non mi riesce ad impostare la sessione ma il campo rs("id_utente") è come se non andasse bene, ho provato a modificare qualcosa, ma nulla sempre stesso errore. e non avendo mai usato questo metodo non so come prendere l'id_utente.

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    connetti()
    'strsql = "Select count(id_utente) from Utenti where username='" & username.Text & "' and passwd='" & passwd.Text & "'"
    strsql = "Select id_utente from Utenti where username='" & username.Text & "' and passwd='" & passwd.Text & "'"
    cmdSql = New OleDbCommand(strsql, conn)
    'cmdSql.Parameters.Add("username", System.Data.OleDb.OleDbType.VarChar).Value = username.Text
    'cmdSql.Parameters.Add("passwd", System.Data.OleDb.OleDbType.VarChar).Value = passwd.Text
    '(usa i parametri e non incollare stringhe nelle query)
    Dim res As Integer = cmdSql.ExecuteScalar

    If res > 0 Then
    Session("utente") = rs("id_utente")
    Response.Redirect("menu.aspx")
    Else
    messaggio.Text = "Password o Username errati."
    End If
    rs = cmdSql.ExecuteReader()

    rs.Close()
    conn.Close()
    End Sub

  9. #9

    Re: qualcosa non va

    Originariamente inviato da mexican
    Non mi riesce ad impostare la sessione ma il campo rs("id_utente") è come se non andasse bene, ho provato a modificare qualcosa...
    VVoVe: il codice e' sbagliato (almeno per semplificare la lettura potevi togliere la parte commentata).
    codice:
    Dim idUtente As Integer = cmdSql.ExecuteScalar 
    If idUtente > 0 Then 
    Session("utente") = idUtente 
    Response.Redirect("menu.aspx") 
    Else ...
    Non sarebbe meglio approfondire prima nella teoria l'uso del command.executescalar e executereader le differenze ecc. prima di scrivere codice e andare avanti a tentativi?
    Saluti a tutti
    Riccardo

  10. #10
    Utente di HTML.it L'avatar di mexican
    Registrato dal
    Oct 2001
    residenza
    cava de tirreni
    Messaggi
    3,541

    certo

    sarebbe meglio approfondire la teorie ma non ho il libbro di asp.net con me e qui internet è molto limitato da firewall quindi pochi siti accessibili. E non posso far vedere che perdo tempo a fare altre cose ma a casa mi leggerò sicuramente cosa fa questo metodo.
    Grazie per la disponibilità

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.