Conexion Base de Datos con ACCESS ó SQL SERVER 2005

Iniciado por Noskcire, 27 Julio 2009, 19:17 PM

0 Miembros y 1 Visitante están viendo este tema.

Noskcire

Hola A Todos mi problema es este:

Como lo he dicho antes estoy desarrollando una aplicación en donde tengo un login.
He creado una base de datos de prueba llamada: USUARIO EN ACCESS 2007
donde esta cuenta solamente con una Tabla llamada: USUARIOS tambien; esta tiene dos campos: uno llamado "usuario" y otro llamado "clave"

Quiero conectar esta base de datos para poder hacer la validación en mi formulario LOGIN

Cuando le preciono el botón aceptar no hace nada , pero parece que mi conexuion esta bien o no se porke no me tira ningun error al ejecutar mi aplicación
Solo que no me hace la validación y de prueba he puesto un MessageBox.Show("bien ha pasado")



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace WindowsFormsApplication1
{
    public partial class LoginForm : Form
    {
        public LoginForm()
        {
            InitializeComponent();
        }
         
             
        private void LoginForm_Load(object sender, EventArgs e)
        {
           
                 
        }
             
        //evento para el botón Aceptar
        private void Aceptar_btn_Click(object sender, EventArgs e)
        {
            //cerando la cadena de conexion
            string cadena =
            @"Provider=Microsoft.ACE.OLEDB.12.0;

               Data Source=C:\Documents and Settings\Administrator\Desktop\ING. Figueroa\programacion . NET\C#\Proyecto\ORES SOFT\WindowsFormsOreSoft\WindowsFormsOreSoftAPP\USUARIOS.accdb;Persist Security Info=False";

            //Objeto conexion
            OleDbConnection conexion = new OleDbConnection(cadena);
            conexion.Open();
         
            string Usuario = this.usuario_tbx.Text;
            string Clave = this.clave_tbx.Text;

            if (Usuario == "" || Clave == "")
            {
                MessageBox.Show("Debe llenar los Campos");
                this.usuario_tbx.Focus();
                return;
           
            }
         
    //Hago mi consulta           
     string strsql = "SELECT [USUARIO], [CLAVE] FROM USUARIOS WHERE [USUARIO]=" + this.usuario_tbx + "[CLAVE]=" + this.clave_tbx + "";
             
         
            //admin y ore es la credencial en mi tabla de USUARIOS

            if (Usuario == "admin" && Clave == "Ore")
            {                                             
                MessageBox.Show("hola ,paso");
                       
            }
         
        }
        //Evento Botón Cancelar
        private void Cancelar_btn_Click(object sender, EventArgs e)
        { 
            //Sale de la aplicacion
            Application.Exit();
                                 
        }
     
                   
    }
}
Las Intenciones Secretas son como aguas profundas
per quien sabe descubrilas , es inteligente...

Pablo Videla

#1
Hola que tal , creo que la consulta sql, esta mal hecha... seria tu la tienes asi

Código (csharp) [Seleccionar]
string strsql = "SELECT [USUARIO], [CLAVE] FROM USUARIOS WHERE [USUARIO]=" + this.usuario_tbx + "[CLAVE]=" + this.clave_tbx +

creo que seria asi la forma correcta

Código (csharp) [Seleccionar]
string strsql = "SELECT [USUARIO], [CLAVE] FROM USUARIOS WHERE [USUARIO]=" + this.usuario_tbx.Text + " AND [CLAVE]=" + this.clave_tbx.Text +"

// si los datos son de textos algunos necesitan la comilla simple '
// dependiendo en que caso se vea...
// tu error era que te falta la clausula AND en la consulta sql
// puedo estar equivocado , pero confirmalo.


Y otra cosa, de donde estas obteniendo los datos clave y usuario , no veo que lo guarden en la variable que supuestamente deben obtener de la consulta sql.... creo que hay varios problemas ahi , por que no estas validando segun la consulta sql.....  :-\


aqui te dejo un ejemplo como deberia ser... esto lo hice yo...

Código (csharp) [Seleccionar]
 OleDbConnection cnn = new OleDbConnection();
               cnn.ConnectionString = @"PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=C:\autos.mdb";
               cnn.Open();
               OleDbCommand select = new OleDbCommand("select * from usuarios where usuario = "+txt1.Text+" and password = "+txt2.Text+"");
               OleDbDataReader resultado;
               resultado = select.ExecuteReader();
// significa que mientras resultado arroje algo entrara en el while, si no , no //actuara
               while (resultado.Read())
               {
                   MsgBox("Entre al Sistema");
               }// el codigo ha sido modificado para tu comprension

Noskcire

Hola Hermano Gracias por la atención pero sigo con el problema.
Resulta que lo hice como me dijiste y me tira una exepción :

Connection property has not been initialized.

y se para el debuger en esta parte del codigo:

  resultado = select.ExecuteReader();

AHORA MIRA TAMBIEN LO MODIFIQUE CONBINANDO LO que ME DISTE CON LO
QUE TENIA PERO TAMBIEN ME TIRA ESTA EXEPCION:

ExecuteReader requires an open and available Connection

MIRA MI AULTIMO CODIGO:

//evento para el botón Aceptar
        private void Aceptar_btn_Click(object sender, EventArgs e)
        {
            string cadena = @"PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Documents and Settings\Administrator\Desktop\ING. Figueroa\programacion . NET\C#\Proyecto\ORES SOFT\WindowsFormsOreSoft\WindowsFormsOreSoftAPP\usuARIOS.accdb";
         

            // cadena de lectura
            string strsql = "select * from  USUARIOS where USUARIO  = " + usuario_tbx.Text + " and CLAVE =" + clave_tbx.Text + "";

            using (OleDbConnection conexion = new OleDbConnection(cadena))
            {
                OleDbCommand select = new OleDbCommand(strsql, conexion);
                OleDbDataReader resultado = select.ExecuteReader();
                conexion.Open();
                resultado.NextResult();
                conexion.Dispose();
                while (resultado.Read())
                {

                    MessageBox.Show("Entre al sistema");
                    // el codigo ha sido modificado para tu comprension

                }

                resultado.Close();
            }         
                                       
       
        }

Y RECUERDATE QUE  ESTA BASE DE DATOS ES EN ACCESS 2007 POR ESO EL PROVIDER LO PUSE COMO ESTA Y NO COMO TU LO PUSISTE

SI POR FAVOR ME PODRIAS MANDAR ALGO TERMINADO OSEA UN EJEMPLO CON TODO EL CODIGO, TE LO AGRADECERIA HERMANO YA ESTOY ROJO CON ESTO

GRACIAS ESPERO RESP...!!!1
Las Intenciones Secretas son como aguas profundas
per quien sabe descubrilas , es inteligente...

Pablo Videla

Coloca OleDbDataReader resultado = select.ExecuteReader(); antes del executeReader por eso no detecta la conexion. , saludos si sigues con problemas me dices y te busco ejemplos

Noskcire

ok te hago saber si me funciona y si no por favor buscame un ejemplo creado please!!
Las Intenciones Secretas son como aguas profundas
per quien sabe descubrilas , es inteligente...

Noskcire

no me funcionó out! si sta a tu alcance los ejemplos plz
Las Intenciones Secretas son como aguas profundas
per quien sabe descubrilas , es inteligente...

Pablo Videla

mas claro imposible

Código (csharp) [Seleccionar]
private void btAcceder_Click(object sender, EventArgs e)
        {
            try
            {
                OleDbConnection cnn = new OleDbConnection();
                cnn.ConnectionString = @"PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=C:\autos.mdb";
                cnn.Open();
                OleDbCommand select = new OleDbCommand("select * from conexion where password = '" + txtPassword.Text + "'", cnn);
                OleDbDataReader resultado;
                resultado = select.ExecuteReader();
               
                while (resultado.Read())
                {
                    MessageBox.Show("Clave Correcta");
                    tabControl1.Visible = true;
                    btVerBase.Visible = true;
                    btAcceder.Visible = false;
                    txtPassword.Visible = false;
                    label19.Visible = false;
                    lbMaxConVerde.Visible = false;
                    label1.Visible = true;
                    //size 662; 689
                    this.Size = new System.Drawing.Size(662, 689);
                }
                if (tabControl1.Visible == false)
                {
                    MessageBox.Show("Clave Incorrecta , intente nuevamente");
                }
               

            }
            catch (Exception error)
            {
                MessageBox.Show("Error..." + error.Message);
            }
           
        }

Noskcire

Gracias hermano , de todos modos no funciono, mejor lo hare con el sql en vez del acces
Las Intenciones Secretas son como aguas profundas
per quien sabe descubrilas , es inteligente...

Pablo Videla

Por que no funciono :huh: , tratamos de solucionarlo viejo , de eso se trata la programacion , solucionar problemas  ;D

ahora dinos que error te salio y todo con lujos de detalles si es posible, los codigos completos

seba123neo

Cita de: Noskcire en  3 Agosto 2009, 20:46 PM
Gracias hermano , de todos modos no funciono, mejor lo hare con el sql en vez del acces


un ejemplo mas facil no te pudieron poner...deci porque no te funciono...sino es pura suposición...mira el codigo y seguilo y fijate porque no anda...no creo que lo hayas escrito tal cual, debes adaptarlo a lo que vos tenes...

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson