none
problema de la conexion cuando quiero ingresar a algun sitio RRS feed

  • Pregunta

  • me da un error en el data sourse    

    esta es la capa de conexion

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Data.SqlClient;
    namespace AgenciaDeViajesProyectoIDS
    {
        class Conexion
        {
            public string cadenaconexion;
            protected string sql;
            protected int Resultado;
            protected SqlConnection cnn;
            protected SqlCommand comandossql;
            protected string mensaje;

            //Creacion del metodo para la conexion
            public Conexion()
            {
                this.cadenaconexion = "@Data Sourse=(DESKTOP-5VKNKLM\\SQLEXPRESS);Initial Catalog =Proyecto; Integrated Security=true";
                this.cnn = new SqlConnection(this.cadenaconexion);
            }//aqui termina el metodo de la conexion
            
            //Creamos otro metodo para el mensaje
            public string Mensaje
            {
                get
                {
                    return this.mensaje;
                }
            }
        }
    }
    y esta es la capa de usuarios

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Data.SqlClient;
    namespace AgenciaDeViajesProyectoIDS
    {
        class usuarios:Conexion
        {
            private string usuario;
            private string password;
            //Creacion del metodo
            public usuarios()
            {
                usuario = string.Empty;
                password = string.Empty;
                this.sql = string.Empty;
            }
            public string Usuario
            {
                get { return this.usuario; }
                set { this.usuario = value;}
            }
            public string Password
            {
                get { return this.password; }
                set { this.password = value; }
            }
            //Metodo para buscar en la base de datos
            public bool Buscar()
            {
                bool Resultado = false;
                this.sql= string.Format(@"Select IDAdministrador from Administraodr where IDAdministrador='{0}' and Password='{1}'",this.usuario,this.password);
                this.comandossql = new SqlCommand(this.sql, this.cnn);
                this.cnn.Open();
                SqlDataReader Reg = null;
                Reg = this.comandossql.ExecuteReader();
                if (Reg.Read())
                {
                    Resultado = true;
                    this.mensaje="Bienvenido";
                }
                else
                {
                    this.mensaje = "Datos incorrectos";
                }
                this.cnn.Close();
                return Resultado;
            }

        }
    }

    y este es el codigo del boton

     {
                usuarios obj = new usuarios();
                obj.Usuario = txtusuario.Text;
                obj.Password = txtcontraseña.Text;
                if (obj.Buscar() == true)
                {
                    MessageBox.Show(obj.Mensaje, "Login");
                    Form3 admin = new Form3();
                    admin.Show();
                    this.Hide();
                }
                else
                {
                    MessageBox.Show(obj.Mensaje, "Error");
                }
            }

    miércoles, 29 de mayo de 2019 17:00

Todas las respuestas

  • > this.cadenaconexion = "@Data Sourse=(DESKTOP-5VKNKLM\\SQLEXPRESS);Initial Catalog =Proyecto; Integrated Security=true";

    Hay que sacar la arroba fuera del string y dejar una sola contrabarra, o bien suprimir la arroba y dejar las dos contrabarras. Pero no se puede combinar como lo has puesto. Ah, y sobran los paréntesis alrededor del DataSource. Solo se ponen cuando es (local), pero no si es cualquier otra cosa.

    Es decir, optar por una de estas dos variantes:

    this.cadenaconexion = @"Data Sourse=DESKTOP-5VKNKLM\SQLEXPRESS;Initial Catalog=Proyecto; Integrated Security=true";

    o bien:

    this.cadenaconexion = "Data Sourse=DESKTOP-5VKNKLM\\SQLEXPRESS;Initial Catalog=Proyecto; Integrated Security=true";

    miércoles, 29 de mayo de 2019 21:42
  • me da el siguiente error amigo

    System.ArgumentException: 'Palabra clave no admitida: 'data sourse'.'

    miércoles, 29 de mayo de 2019 22:52
  • me da el siguiente error amigo

    System.ArgumentException: 'Palabra clave no admitida: 'data sourse'.'

    System.NullReferenceException: 'Referencia a objeto no establecida como instancia de un objeto.'

    System.ArgumentException: 'Palabra clave no admitida: 'data sourse'.'

    estos dos erroes me aparecen

    miércoles, 29 de mayo de 2019 22:55
  • No es "sourse", hay que poner "source".

    jueves, 30 de mayo de 2019 5:39
  • ya lo modifique a como me dijo y dice que la conexion es un valor nulo
    jueves, 30 de mayo de 2019 17:15
  • marca ese error en la siguiente linea

    this.cnn.Open();

    System.NullReferenceException: 'Referencia a objeto no establecida como instancia de un objeto.'

    jueves, 30 de mayo de 2019 17:30
  • Bien, pero eso es un problema distinto. Ahora ya de la cadena conexión no se queja. El tema del NullReferenceException es un simple problema de error de programación: se está accediendo a una variable antes de haberle asignado el valor. En estos casos hay que usar el debugger: fijarse en qué línea exacta sale ese error, examinar las variables de esa línea a ver cuál es null, y seguir todo el proceso que ha llevado hasta esa línea (usando si es preciso la opción de paso-a-paso del debugger) hasta encontrar por qué esa variable que esperábamos que tuviera un valor no tiene el valor esperado. Invariablemente esto se debe a que la ejecución no ha pasado antes por el sitio donde se le asigna el valor.
    jueves, 30 de mayo de 2019 17:32
  • marca ese error en la siguiente linea

    this.cnn.Open();

    System.NullReferenceException: 'Referencia a objeto no establecida como instancia de un objeto.'

    Eso indica que la variable cnn está vacía cuando llegas a esa línea.

    Revisa el flujo de ejecución de tu programa, a ver por qué no ha pasado primero por la parte donde se mete un valor en cnn antes de llegar a la parte en que se hace el open de cnn.

    En particular, fíjate que el valor lo llamas desde la clase Usuario, que hereda de Conexion. Pero Usuario tiene un constructor que no llama al constructor base, por lo que el constructor de Conexion no se llega a ejecutar nunca. Y cnn se inicializa en ese constructor, por lo que siempre queda vacío.

    Pero todo eso lo habrías detectado tú mismo si hubieras utilizado el debugger como yo te decía, porque al ejecutar paso-a-paso el código te habrías dado cuenta de que ninguno de los pasos pasa por la parte del código donde inicializas cnn.

    jueves, 30 de mayo de 2019 18:31
  • como pueda darle el valor para que me devuelva la conexion y pueda hacer un login
    jueves, 30 de mayo de 2019 19:48
  • Pues si no me equivoco la solución más sencilla en este caso es llamar al constructor de la clase madre desde el constructor de la clase Usuarios. Es decir, cambiar esta línea:

    public usuarios()

    por esta otra:

    public usuarios() : base()

    Pero fíjate que esto no tiene nada que ver con el hecho de que estés usando una conexión o puedas hacer un login. Es un tema básico y fundamental de programación orientada a objetos. Te pasaría exactamente lo mismo si estuvieses usando de esta manera cualquier otra variable aunque esa variable no tenga nada que ver con ninguna conexión.

    jueves, 30 de mayo de 2019 20:49
  • sigue apareciendo el mismo error aun con ese cambio que mencionas
    viernes, 31 de mayo de 2019 0:37
  • Pues entonces vas a tener que usar el debugger.
    viernes, 31 de mayo de 2019 6:08
  • como uso el debuger
    viernes, 31 de mayo de 2019 12:33
  • Desde Visual Studio, fíjate que hay un menú que se llama "Debug" (o "depurar" en la versión española). Ahí están todas las opciones. Lo más típico es poner un punto de ruptura (pulsando la F9 o usando la correspondiente opción del menú) sobre la línea de código en la que queremos pararnos. Entonces se "inicia depuración" desde Visual Studio y cuando se pare sobre esa línea se usan las teclas F10 y F11 para ejecutar paso a paso, y se puede pasar el ratón sobre una variable para ver lo que vale. Ademas hay varias ventanitas en pantalla, como "Locals", "Autos" y "Stack" que también dan infomación sobre el programa.

    Recomiendo que busques algún manual y estudies el uso del debugger. Aunque pierdas un poco de tiempo en ello, después en el futuro el debugger te ahorra muchísimo más tiempo que el que cuesta aprenderlo.

    viernes, 31 de mayo de 2019 15:52