none
leer base de datos .sdf RRS feed

  • Pregunta

  • Hola,

    He realizado la siguiente rutina para windows CE para verificar la contraseña de los usuarios de mi base de datos en .sdf.

    query = "SELECT CONTRASEÑA, PRIVILEGIOS FROM USUARIOS WHERE nombre ='" & nombre_usuario.Text & "'"
            adaptador = New SqlCeDataAdapter(query, conexion) 'definimos la conexión y el comando de sql
            CMD = New SqlCeCommand(query, conexion) 'definimos el lector de datos
            reader = CMD.ExecuteReader() 'ejecutamos la lectura
          
            While reader.Read() 'si read es 1 quiere decir que hay algún dato leído, mientras sea true irá mostrando datos, se autoincrementa
                If reader.GetString(0) = clave.Text Then
                    'si la contraseña es correcta, a partir de aquí se tendrían que conceder todos los permisos de la aplicación
                    logged_user = nombre_usuario.Text
                    nivel_acceso = reader.GetString(1) ' lee los privilegios del usuario
                    MessageBox.Show("Contraseña correcta")
                    conexion.Close()
                Else
                    MessageBox.Show("Contraseña erronea o No cumple condicion de longitud")
                End If
                Exit Sub
                'si no es la contraseña correcta que siga buscando.
            End While
            reader.Close()

    No logro hacerla funcionar y me da un error en ExecuteReader: Connection property has not been initialized, he probado otras variantes de esa linea pero sin encontrar solución.

    Gracias a todos,

    jueves, 30 de mayo de 2013 15:45

Todas las respuestas

  • El error es muy claro, no has inicializado una conexión a la base de datos a la cual leer...

    Deberías hacer algo asi

    Dim conn As SqlCeConnection = Nothing
    
    Try
        conn = New SqlCeConnection("Data Source = MyDatabase.sdf; Password ='<pwd>'")
        conn.Open()
    
        Dim cmd As SqlCeCommand = conn.CreateCommand()
        cmd.CommandText = "INSERT INTO Customers ([Customer ID], [Company Name]) Values('NWIND', 'Northwind Traders')"
    
        cmd.ExecuteNonQuery()
    Finally
        conn.Close()
    End Try
    

    http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlceconnection(VS.80).aspx


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    jueves, 30 de mayo de 2013 16:31
  • porque no usas algo como ser

    string query = "SELECT COUNT(*) FROM USUARIOS WHERE nombre = @nombre AND CONTRASEÑA = @pass"
    SqlCeCommand CMD = New SqlCeCommand(query, conexion) 
    CMD.Parameters.AddWithValue("@nombre", nombre_usuario.Text);
    CMD.Parameters.AddWithValue("@pass", clave.Text);
    int result = Convert.ToInt32(CMD.ExecuteScalar());
    
    if(result > 0)
    	logged_user = nombre_usuario.Text
    	//aqui realizas otra query filtrando por el usuario para tomar los privilegios
    	MessageBox.Show("Contraseña correcta")
    Else
    	MessageBox.Show("Contraseña erronea o No cumple condicion de longitud")
    End If

    no autentiques y quieras recuperar los datos del rol de usuario en la misma operacion, porque son cosas distintas

    el rol lo recuperas despues de autenticar

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 30 de mayo de 2013 17:11
  • Hola leonardo,

    Me da el siguiente error en  result = Convert.ToInt32(CMD.ExecuteScalar())

    ExecuteScalar: Connection property has not been initialized.

    Tenía la apliación con  System.Data.OleDb y me esta costando un mundo adaptarlo.

    Gracias,

    • Propuesto como respuesta Sergio Parra jueves, 30 de mayo de 2013 19:17
    • Votado como útil Sergio Parra jueves, 30 de mayo de 2013 19:17
    jueves, 30 de mayo de 2013 18:50
  • Comprueba que tienes inicializado crrectamente una conexión,,con su connection string correctamente formateada

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    jueves, 30 de mayo de 2013 19:18
  • El objeto conexion es de tipo sqlceconnection??donde la abres??

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    jueves, 30 de mayo de 2013 19:20
  • Gracias sergio,

    tienes razón es que antes cargo un combobox y como no me salgo tampoco no he inicializado la conexión. Este es mi código completo

    Dim conn As New SqlCeConnection()
            Dim cadena_conexion As String
            cadena_conexion = "Data Source=My Documents\basedatos.sdf"
            conn.ConnectionString = cadena_conexion
            Try
                conn.Open()
                Dim cmd As New SqlCeCommand
                cmd.Connection = conn
                cmd.CommandText = query
                cmd.ExecuteNonQuery()
                conn.Close()
            Catch ex As SqlCeException
                MessageBox.Show("Error en la conexión con la base de datos" + ex.Message)
            End Try
         
            query = "SELECT CONTRASEÑA, PRIVILEGIOS FROM USUARIOS WHERE nombre ='" & nombre_usuario.Text & "'"
            adaptador = New SqlCeDataAdapter(query, conn) 'definimos la conexión y el comando de sql
            CMD = New SqlCeCommand(query, conn) 'definimos el lector de datos
            reader = CMD.ExecuteReader() 'ejecutamos la lectura

            While reader.Read() 'si read es 1 quiere decir que hay algún dato leído, mientras sea true irá mostrando datos, se autoincrementa
                If reader.GetString(0) = clave.Text Then
                    'si la contraseña es correcta, a partir de aquí se tendrían que conceder todos los permisos de la aplicación
                    logged_user = nombre_usuario.Text
                    nivel_acceso = reader.GetString(1) ' lee los privilegios del usuario
                    MessageBox.Show("Contraseña correcta")
                    'onexion.Close()
                Else
                    MessageBox.Show("Contraseña erronea o No cumple condicion de longitud")
                End If
                'xit Sub
                'si no es la contraseña correcta que siga buscando.
            End While
            reader.Close()

    Ahora tengo en cmd.ExecuteNonQuery()--> Prepare: CommandText property has not been initialized

    Mil gracias

    jueves, 30 de mayo de 2013 19:57
  • Try
                conn.Open()
                Dim cmd As New SqlCeCommand
                cmd.Connection = conn
                cmd.CommandText = query
    cmd.ExecuteNonQuery()
                conn.Close()
            Catch ex As SqlCeException
                MessageBox.Show("Error en la conexión con la base de datos" + ex.Message)
            End Try

    Pero en este código..query no tiene asignado ninguna consulta! Esta vacío...establece su valor antes.

                    

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    jueves, 30 de mayo de 2013 20:03
  • Gracias Sergio

    Solucionado.

    jueves, 30 de mayo de 2013 20:41