none
hola tengo una pregunta con System.Data.SqlClient.SqlException RRS feed

  • Pregunta

  • Esque en el codigo dice que hay una excepcion en el codigo al ingresar al login, aparece System.Data.SqlClient.SqlException

    con el dr=com.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using proyPrueba.Models;
    using System.Data.SqlClient;
    
    
    namespace proyPrueba.Controllers
    {
        public class CuentaController : Controller
        {
            SqlConnection con = new SqlConnection();
            SqlCommand com = new SqlCommand();
            SqlDataReader dr;
            // GET: Cuenta
            [HttpGet]
            public ActionResult Login()
            {
    
                return View();
            }
            void connectionString()
            {
                con.ConnectionString = "data source=DESKTOP-JUNLOD4; database=naturista1; integrated security=true;";
            } 
            [HttpPost]
            public ActionResult Verify(Cuenta acc)
            {
                connectionString();
                con.Open();
                com.Connection = con;
                com.CommandText = "select * from ususario where username'"+acc.Name+"'and passwordus'"+acc.passwordus+"'";
                dr = com.ExecuteReader();
                if(dr.Read())
                {
                    con.Close();
                    
                    return View ("Menudef");
                }
                else
                {
                    con.Close();
                    return View("error");
                }
            }
        }
    }

    lunes, 15 de julio de 2019 19:25

Todas las respuestas

  • Hola wolver12:

    Esa construcción sql no es válida.

    El código dice.

    select * from ususario where username'usuario'and passwordus'miclave'

    donde debiera decir 

    select * from ususario where username='usuario' and passwordus='miclave'

    Adicionalmente, deberías, de utilizar parámetros.

    https://blogs.msmvps.com/otelis/2007/06/04/par-225-metros-de-sqlcommand-y-las-variables-de-sql-server/

    lunes, 15 de julio de 2019 20:15
  • Me gustaría recalcar que donde Javi Fernandez te dice "deberías usar parámetros", esto es absolutamente super-imprescindible en una aplicación como esta. Si no lo haces, cualquiera podrá "saltarse" tu contraseña con solo escribir en su nombre de usuario lo siguiente:

    ' or 1=1--

    Pero es peor que eso, también podrían escribir esto:

    ';drop table nombreDeTabla--

    y borrarte así cualquier cosa de tu base de datos, o insertar un registro cualquiera en cualquier tabla, o consultar cualquier dato de cualquier tabla, etc.

    Eso se llama una "inyección de SQL". Por supuesto, todos los hackers lo conocen y es lo primero que prueban cuando quieren atacar una aplicación.

    Para evitarlo, no debes nunca concatenar en una sentencia SQL un dato que sea introducido por el usuario. En su lugar, se debe parametrizar la sentencia.

    lunes, 15 de julio de 2019 20:31
  • vale gracias.

    pero porque me sale 

    System.Data.SqlClient.SqlException: 'Invalid object name 'ususario'.'

    en el dr= com.ExecuteReader();


    lunes, 15 de julio de 2019 21:15
  • Hola wolver12:

    A priori, porque no encuentra un objeto llamado ususario

    use [ejTres]
    go
    create table ususario (username varchar(10), passwordus varchar(10));
    go
    

    Con la base de datos y la tabla creadas.

    Es lo que tú has pegado, quitando que no retorna a ninguna vista, porque es un Windows forms, y que he cambiado tu objeto acc por dos variables. Y esto funciona, o al menos no genera excepciones.

               string var1 = "usuario";
                string clave = "clave";
                connectionString();
                con.Open();
                com.Connection = con;
                com.CommandText = "select * from ususario where username='" + var1 + "'and passwordus='" + clave + "'";
                dr = com.ExecuteReader();
                if (dr.Read())
                {
                    con.Close();
    
                    
                }
                else
                {
                    con.Close();
                    
                }

    martes, 16 de julio de 2019 3:45
  • porque me sale 

    System.Data.SqlClient.SqlException: 'Invalid object name 'ususario'.'

    Eso significa que en el servidor DESKTOP-JUNLOD4, base de datos naturista1, no existe la tabla "usuario".

    No puedes hacer un Select sobre una tabla que no existe.

    martes, 16 de julio de 2019 5:59