Usuario
leer base de datos .sdf

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,
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
-
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 -
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
-
-
-
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
-
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 TryPero 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
-