none
TxtBox no reconoce los valores introducidos por el usuario RRS feed

  • Pregunta

  • Hola, tengo mi condición echa pero al pasar los valores no me reconoce en mi sql. Ejemplo: Un usuario escribo en el txtreferncia valores y estos valores tienen que ser reconocidos en mi SQL mediante la consulta que he echo. Una vez recogidos los valores realizara una busqueda en SQL para encontrar el misma valor, una vez encontrado el mismo valor se introducira automaticamente el valor de la velocidad dependiendo del valor de referencia que el usuario introdujo, esto se escribira en otro campo de txtvelocidad. Aquí esta mi código para encontrar errores, no lo entiendo porque no me funciona

    string sql5 = string.Empty;      
    
            if(!(this.txtReferencia.Text.ToString().Equals(string.Empty)))
              {
              
               sql5 = @"SELECT top 1 Velocidad FROM _EBR_Estado_Velocidades where Producto='"+this.txtReferencia.Text+"'";
              
              DataTable dt2 = this.Ets.Api.Util.Db.GetDataTable(sql5).Return;
               if (dt2.Rows.Count > 0)
               {
                  this.txtvelocidad.Text = Conversor.convertirString(dt2.Rows[0]["Velocidad"]);
               }
               else
                 {
                  this.txtvelocidad.Text = string.Format("REGISTRO:{0}",dt2.Rows.Count);
                  btnFinal.Disabled = false;
                 }
               }
           else {
               this.txtvelocidad.Text = "";
           }


    geovanny


    lunes, 30 de marzo de 2020 6:42

Respuestas

  • Ah, lo del Page_Load no se veía en el código que pusiste.

    En realidad en el Page_Load sí que te debería llegar correctamente cargado el txtReferencia si es que en pantalla han tecleado algo antes de hacer el PostBack (¡pero no durante la primera ejecución del Page_Load durante la carga inicial de la página!). Puede ser que haya alguna otra inicialización dentro del Page_Load que haga que se vacíe el txt. O tal vez lo hayas escrito inadvertidamente dentro del "not ispostback" y por eso no se ejecute cuando el txt se recibe durante el postback.

    • Marcado como respuesta GeovannyVarLo miércoles, 1 de abril de 2020 6:23
    martes, 31 de marzo de 2020 11:58
    Moderador

Todas las respuestas

  • Creo que tienes la condición al revés: El primer "if" dice que si el txtReferencia está vacío entonces se ejecute todo lo demás, y de lo contrario se vacíe el txtVelocidad. No tiene mucho sentido hacer el SELECT que busca el txtReferencia únicamente cuando el txtReferencia esté vacío. Creo que lo que intentabas hacer es buscar cuando NO esté vacío. The falta meter ese "not" en el "if".
    lunes, 30 de marzo de 2020 7:27
    Moderador
  • Lo he probado realizando como dices. Que sea distinto a vacío pero sigue sin funcionar 

    geovanny

    lunes, 30 de marzo de 2020 7:35
  • Hay que afinar mas. "Sigue sin funcionar" no es descripcion suficiente. Hay que explicar cual es la forma exacta en la que no funciona. Cuales son los sintomas que se observan, que errores salen, que sentencias se ejecutan o no se ejecutan, que valores de las variables muestra el debugger al poner un punto de ruptura, etc. Necesitamos mas informacion para poder identificar el problema.
    lunes, 30 de marzo de 2020 9:55
    Moderador
  • Pues esque no tengo errores, he realizado un log para mirar los errores 

    2020-03-30_14:49:24 -- Informacion
    Clase: 
    metodo: Consulta de velocidades
    descripcion: SELECT TOP 1 Velocidad FROM _EBR_Estado_Velocidades where Producto=''
    --------------------------------------------------------------------------------
    --------------------------------------------------------------------------------
    2020-03-30_14:50:14 -- Informacion
    Clase: 
    metodo: Consulta de velocidades
    descripcion: SELECT TOP 1 Velocidad FROM _EBR_Estado_Velocidades where Producto=''


    Lo que veo es que no me esta introduciendo los valores que el usuario esta poniendo


    geovanny

    lunes, 30 de marzo de 2020 13:50
  • hola

    tienes que usar parametros, no contatener los valores en un string

    No se que hace Db.GetDataTable() pero sino permite parametros lo descartas

    Si vas a recuperar un solo registro se usa un reader

    string connstring = "connection string";  
    using (SqlConnection cn = new SqlConnection(connstring)) {  
        cn.Open();  
     
        string sql = "SELECT top 1 Velocidad FROM _EBR_Estado_Velocidades where Producto= @prod";  
        SqlCommand cmd = new SqlCommand(query, cn);  
        cmd.Parameters.AddwithValue("@prod", txtReferencia.Text);  
     
        SqlDataReader reader = cmd.ExecuteReader();  
     
        if (reader.Read())  
        {  
            txtvelocidad.Text = Convert.ToString(reader["Velocidad"]);  
        }  
     
    } 

    Para validar si el textbox esta vacio usas

    if(string.IsNullOrEmpty(txtReferencia.Text)){
    
       txtvelocidad.Text = "";
       return;
    
    }
    
    //resto codigo



    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 30 de marzo de 2020 14:40
  • SELECT TOP 1 Velocidad FROM _EBR_Estado_Velocidades where Producto=''

    Ahí se ve cuál es el problema por el que no funciona la parte de código que has mostrado: te está llegando vacío el txtReferencia.

    El por qué llega vacío ya no se puede determinar examinando tan solo este fragmento de código. Puede ser por distintas causas, tales como algún manejador de eventos que lo vacía antes de llegar ahí, o el clásico error de volver a instanciar el form y tomar el textbox de la instancia nueva en lugar de la instancia que se ha rellenado en pantalla.

    lunes, 30 de marzo de 2020 17:07
    Moderador
  • La conexión al Sql se encuentra echa en mi sistema, el Db.GetDataTable() coge los datos de mi sql ejecutando mi consulta. Introduciendo los datos que me has dado me da el siguiente error.

    geovanny

    martes, 31 de marzo de 2020 7:07
  • No se cual seria el error de los que me has citado. He realizado una función diferente en la cual al volver a cargar la pagina los datos son correctamente intoducidos.

         protected void txtReferencia_TextChanged(object sender, EventArgs e)  
    { 
          string sql5 = string.Empty;      
         try { 
            if(!(this.txtReferencia.Text.ToString().Equals(string.Empty)))
              {
              
               sql5 = @"SELECT TOP 1 Velocidad FROM _EBR_Estado_Velocidades where Producto='"+this.txtReferencia.Text+"'";
               DataTable dt2 = this.Ets.Api.Util.Db.GetDataTable(sql5).Return;
               if (dt2.Rows.Count > 0)
               {
                  this.txtvelocidad.Text = Conversor.convertirString(dt2.Rows[0]["Velocidad"]);
               }
               else
                 {
                  this.txtvelocidad.Text = string.Format("{0}",dt2.Rows.Count);
                 
                 }
                }
           else {
                this.txtvelocidad.Text = "";      
           }
           }
           
           catch (Exception ex){
            Log.insertarComentario("","error de query", ex.Message.ToString());
          }   
        }

    El caso es que esto no me va a servir para lo que estoy buscando. Lo que busco es el caso primero.


    geovanny

    martes, 31 de marzo de 2020 7:25
  • No veo la diferencia. ¿En qué se distingue esta función de la que pusiste antes, para que en la anterior te llegue el txtReferencia vacío y en esta no?
    martes, 31 de marzo de 2020 8:10
    Moderador
  • En la anterior la cargo en la función de  protected void Page_Load(object sender, EventArgs e)
        {} y en la segunda hago una función especifica para el txtbox

    protected void txtReferencia_TextChanged(object sender, EventArgs e) { }


    geovanny

    martes, 31 de marzo de 2020 8:23
  • Ah, lo del Page_Load no se veía en el código que pusiste.

    En realidad en el Page_Load sí que te debería llegar correctamente cargado el txtReferencia si es que en pantalla han tecleado algo antes de hacer el PostBack (¡pero no durante la primera ejecución del Page_Load durante la carga inicial de la página!). Puede ser que haya alguna otra inicialización dentro del Page_Load que haga que se vacíe el txt. O tal vez lo hayas escrito inadvertidamente dentro del "not ispostback" y por eso no se ejecute cuando el txt se recibe durante el postback.

    • Marcado como respuesta GeovannyVarLo miércoles, 1 de abril de 2020 6:23
    martes, 31 de marzo de 2020 11:58
    Moderador
  • Si eso mismo es el problema el del PostBack. Con esto me valdría gracia.

    geovanny

    miércoles, 1 de abril de 2020 6:23
  • Hilo cerrado
    viernes, 3 de abril de 2020 19:45
    Moderador