none
Sección "Perdi mi contraseña"

    Question

  • Buena tengo un problema con esto. AL momento que leo los datos y estos mismo los trato de updatear me da un error que no entiendo.

     

     Public Sub recuperarclave()
    
        Dim id, rango, status As Integer
        Dim nombre, clave, correo As String
        Dim myConnectionString As String = ConfigurationManager.ConnectionStrings("ConnectionString").ToString
        Using cnn As New SqlConnection(Me.SqlDataSource1.ConnectionString)
          Dim cmd As New SqlCommand( _
              "SELECT Count(*) " & _
              "FROM usuarios_ " & _
              "WHERE usucorreo = @usucorreo", cnn)
          ' Abrimos la conexión
          cnn.Open()
          ' Añadimos el valor del parámetro de la consulta
          cmd.Parameters.AddWithValue("@usucorreo", txtuserrec.Text)
          ' Si devuelve algun valor, es que ya existe
          Dim i As Integer
    
          i = CInt(cmd.ExecuteScalar())
          cnn.Close()
          If i > 0 Then
            ' Avisamos y salimos
            Me.lblrecuperar.Text = "El usuario ya existe"
          Else
            Me.lblrecuperar.Text = "El usuario NO existe"
            Exit Sub
          End If
    
    
    End Using
    
        Using myConnection As New SqlConnection(myConnectionString)
          myConnection.Open()
    
          Dim mySelectQuery As String = "SELECT * from usuarios_ where usucorreo = @usucorreo"
    
    
          Dim myCommand As New SqlCommand(mySelectQuery, myConnection)
          myCommand.Parameters.AddWithValue("@usucorreo", txtuserrec.Text)
    
          Dim myReader As SqlDataReader = myCommand.ExecuteReader()
    
          myReader.Read()
    
    
          id = CStr(myReader(0))
          nombre = CStr(myReader(1).ToString)
          clave = CStr(myReader(2).ToString)
          correo = CStr(myReader(3).ToString)
          rango = CStr(myReader(4).ToString)
          status = CStr(myReader(5).ToString)
    
          myReader.Close()
          myCommand.Parameters.AddWithValue("@usuid", id)
          myCommand.Parameters.AddWithValue("@usunombre", nombre)
          myCommand.Parameters.AddWithValue("@usuclave", clave)
          myCommand.Parameters.AddWithValue("@usurango", rango)
          myCommand.Parameters.AddWithValue("@usustatus", status)
        End Using
    
       
        Using cnn2 As New SqlConnection(Me.SqlDataSource1.ConnectionString)
          Dim cmd2 As New SqlCommand(Me.SqlDataSource1.UpdateCommand, cnn2)
    
          ' Abrimos la conexión
          cnn2.Open()
    
          ' Abrimos la conexión
    
          cmd2.Parameters.AddWithValue("@usucorreo", correo)
          ' La clave la guardaremos como un valor SHA1
    
          clave = FormsAuthentication.HashPasswordForStoringInConfigFile( _
                "1", "SHA1")
          'clave = generarClaveSHA1(txtClave.Text)
          cmd2.Parameters.AddWithValue("@usuclave", clave)
    
    
          cmd2.Parameters.AddWithValue("@usunombre", nombre)
          cmd2.Parameters.AddWithValue("@usurango", rango)
          cmd2.Parameters.AddWithValue("@usustatus", status)
          ' Ejecutamos el comando de inserción
    
          cmd2.ExecuteNonQuery()
    
    
    
          cnn2.Close()
        End Using
        MsgBox(id & vbCrLf & nombre & vbCrLf & clave & vbCrLf & correo & vbCrLf & rango & vbCrLf & status)
          
        ' Al salir del bloque Using se cierra la conexión
    
    
    
    
      End Sub
    
    Testiando el problema lo esta en el datareader pero no se como solucionarlo. De verdad gracias al que me pueda ayudar

     


    • Edited by staxman Thursday, May 12, 2011 10:54 PM
    Thursday, May 12, 2011 10:37 PM

Answers

  • bien veo que usas

     Dim cmd2 As New SqlCommand(Me.SqlDataSource1.UpdateCommand, cnn2)

    pero has validado que el SqlDataSource1 tenga definida la query del UPDATE en su control ?

    ademas porque lo ahces asi y no como esta mas arriba definiend en un string el query del UPDATE ?

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by staxman Thursday, May 12, 2011 11:18 PM
    Thursday, May 12, 2011 11:00 PM

All replies

  • hola

    no entiendo como se relaciona el titulo con la explciacion del problema ?

    osea la contraseña seria del login de sql server ? y el error del reader que mensaje visualzias, esto seguro ayude a determianr la causa del problema

     

    algo que noto es que deberias usar

    If myReader.Read() then

        Dim id = CStr(myReader(0))
        Dim nombre = CStr(myReader(1).ToString)
        Dim clave = CStr(myReader(2).ToString)
        Dim correo = CStr(myReader(3).ToString)
        Dim rango = CStr(myReader(4).ToString)
        Dim status = CStr(myReader(5).ToString)

    End If

    porque como te aseguras que la query devuelve registros

    puede que hagas el Read() y sino hay registros para el parametero al acceder a unos de los campos obtendras un error

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Thursday, May 12, 2011 10:46 PM
  • cierot sr tuttini, saludos lo tenia asi. ahora lo he cambiado un poco. Me sigue con el error "

    ExecuteNonQuery: no se ha inicializado la propiedad CommandText

    "

     

     Public Sub recuperarclave()
    
      Dim id, rango, status As Integer
      Dim nombre, clave, correo As String
      Dim myConnectionString As String = ConfigurationManager.ConnectionStrings("ConnectionString").ToString
      Using cnn As New SqlConnection(Me.SqlDataSource1.ConnectionString)
       Dim cmd As New SqlCommand( _
         "SELECT Count(*) " & _
         "FROM usuarios_ " & _
         "WHERE usucorreo = @usucorreo", cnn)
       ' Abrimos la conexión
       cnn.Open()
       ' Añadimos el valor del parámetro de la consulta
       cmd.Parameters.AddWithValue("@usucorreo", txtuserrec.Text)
       ' Si devuelve algun valor, es que ya existe
       Dim i As Integer
    
       i = CInt(cmd.ExecuteScalar())
       cnn.Close()
       If i > 0 Then
        ' Avisamos y salimos
        Me.lblrecuperar.Text = "El usuario ya existe"
       Else
        Me.lblrecuperar.Text = "El usuario NO existe"
        Exit Sub
       End If
    
    
    End Using
    
      Using myConnection As New SqlConnection(myConnectionString)
       myConnection.Open()
    
       Dim mySelectQuery As String = "SELECT * from usuarios_ where usucorreo = @usucorreo"
    
    
       Dim myCommand As New SqlCommand(mySelectQuery, myConnection)
       myCommand.Parameters.AddWithValue("@usucorreo", txtuserrec.Text)
    
       Dim myReader As SqlDataReader = myCommand.ExecuteReader()
    
       If myReader.Read() Then
    
    
    
    
        id = CStr(myReader(0))
        nombre = CStr(myReader(1).ToString)
        clave = CStr(myReader(2).ToString)
        correo = CStr(myReader(3).ToString)
        rango = CStr(myReader(4).ToString)
        status = CStr(myReader(5).ToString)
    
        myReader.Close()
        myCommand.Parameters.AddWithValue("@usuid", id)
        myCommand.Parameters.AddWithValue("@usunombre", nombre)
        myCommand.Parameters.AddWithValue("@usuclave", clave)
        myCommand.Parameters.AddWithValue("@usurango", rango)
        myCommand.Parameters.AddWithValue("@usustatus", status)
       End If
      End Using
    
      
      Using cnn2 As New SqlConnection(Me.SqlDataSource1.ConnectionString)
       Dim cmd2 As New SqlCommand(Me.SqlDataSource1.UpdateCommand, cnn2)
    
       ' Abrimos la conexión
       cnn2.Open()
    
       ' Abrimos la conexión
    
       cmd2.Parameters.AddWithValue("@usucorreo", correo)
       ' La clave la guardaremos como un valor SHA1
    
       clave = FormsAuthentication.HashPasswordForStoringInConfigFile( _
          "1", "SHA1")
       'clave = generarClaveSHA1(txtClave.Text)
       cmd2.Parameters.AddWithValue("@usuclave", clave)
    
    
       cmd2.Parameters.AddWithValue("@usunombre", nombre)
       cmd2.Parameters.AddWithValue("@usurango", rango)
       cmd2.Parameters.AddWithValue("@usustatus", status)
       ' Ejecutamos el comando de inserción
    
       cmd2.ExecuteNonQuery()
    
    
    
       cnn2.Close()
      End Using
      MsgBox(id & vbCrLf & nombre & vbCrLf & clave & vbCrLf & correo & vbCrLf & rango & vbCrLf & status)
       
      ' Al salir del bloque Using se cierra la conexión
    
    
    
    
     End Sub
    

     


    • Edited by staxman Thursday, May 12, 2011 10:56 PM
    Thursday, May 12, 2011 10:55 PM
  • me sigue con el problema a la hora del update :(
    Thursday, May 12, 2011 10:55 PM
  • bien veo que usas

     Dim cmd2 As New SqlCommand(Me.SqlDataSource1.UpdateCommand, cnn2)

    pero has validado que el SqlDataSource1 tenga definida la query del UPDATE en su control ?

    ademas porque lo ahces asi y no como esta mas arriba definiend en un string el query del UPDATE ?

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by staxman Thursday, May 12, 2011 11:18 PM
    Thursday, May 12, 2011 11:00 PM
  • jaja sorry era eso lo tenia definido en otro sqldatasource, todo fino sorry.
    Thursday, May 12, 2011 11:18 PM