none
Visualizar el número de un número guardado en una tabla sql en un form c# RRS feed

  • Pregunta

  • Saludos, lo que quiero lograr en esta ocasión es que al momento de abrir el form  

    Se visualise el ultimo  número que tiene guardado la tabla del sql y que al momento 

    De darle a registrar los datos se inserte el número actual y se visualise el siguiente número en el form.


    joel

    lunes, 18 de febrero de 2019 18:00

Respuestas

  • Una pregunta, emm ¿estás visualizando el número en un datagridview o en un simple Textbox o en un Label? . No has especificado bien. 

    Si es en un TextBox o en un Label, en este caso sería ...

     public void mostrar_ultimo_Dato() {
    
    
                SqlCommand comando = new SqlCommand();
    
                String instruccion = "SELECT MAX(studentID) as maximo FROM students";
    
    
                comando.CommandType = CommandType.Text;
                comando.CommandText = instruccion;
                comando.Connection = clases.conexion.conex();            
                comando.ExecuteNonQuery();
                SqlDataReader dr;
                dr = comando.ExecuteReader();
    
                while (dr.Read())
                {
    
    
                    string ultimo_dato = dr["maximo"].ToString();
    
                    label1.Text = ultimo_dato;
    
    
                }
    
            }
    
    
            private void Form1_Load(object sender, EventArgs e)
            {
                mostrar_ultimo_Dato();
    
            }


    • Marcado como respuesta joel201022 lunes, 18 de febrero de 2019 20:58
    lunes, 18 de febrero de 2019 20:18
  • me esta dando error en esta linea

    comando.Connection = clases.conexion.conex();  

    Esa llinea es la forma "abreviada" en la que el autor te estaba diciendo "mete dentro del comando.Connection la cadena de conexion adecuada para tu base de datos".

    En otras palabras, tendrias que poner algo asi:

    comando.Connection = "Aqui hay que poner una cadena de conexion";

    Para no dejar las cadenas de conexion repartidas por todo el codigo, es razonable escribir una unica subrutina que la devuelva y eso es lo que habia hecho el autor de la respuesta dentro de clases.conexion.conex().

    En cualquier caso, ¿qué hay que poner dentro de "Aqui hay que poner una cadena de conexion"? Pues nadie te lo puede decir sin conocer con todo detalle cuál es tu base de datos: tipo, nombre de servidor, nombre de base de datos, credenciales, etc etc. Con toda esa información se ensambla la cadena.

    • Marcado como respuesta joel201022 miércoles, 20 de febrero de 2019 18:08
    miércoles, 20 de febrero de 2019 17:27

Todas las respuestas

  • Para visualizar el último número, puedes enviar un "select MAX(columna)" a la base de datos, y te devolverá el último número. Si eso lo metes en una subrutina, puedes llamarlo al abrir el form y también después de grabar para que se seleccione el siguiente. Ten cuidado si es una aplicación multi-usuario, porque podría ser que mientras se está mostrando en pantalla el último número, otro usuario grabe algo con ese mismo número, con lo que al llegar el momento de grabar desde tu formulario podría ser que el número que mostraste al principio ya no sea el último.

    La forma de enviar el "select(max)" depende de qué tecnología de acceso a datos tengas implementada en tu programa. Ya que no has mencionado nada al respecto, te pongo un ejemplo de cómo se haría si estuvieses usando Entity Framework, pero el código variará muchísimo si estás usando otra cosa:

    using (var ctx = new MiContextoDeDatos())
    {
        var q = (from x in ctx.MiTabla select x.MiNumero).Max();
        textBox1.Text = q.ToString();
    }
    

    Ojo, la primera vez, cuando no haya nada en la tabla, fallará al obtener el último número ya que no existirá ningún último número. Tendrás que prever qué es lo que quieres hacer en este caso especial y añadir en el código un tratamiento para este caso especial.

    lunes, 18 de febrero de 2019 19:24
  • Una pregunta, emm ¿estás visualizando el número en un datagridview o en un simple Textbox o en un Label? . No has especificado bien. 

    Si es en un TextBox o en un Label, en este caso sería ...

     public void mostrar_ultimo_Dato() {
    
    
                SqlCommand comando = new SqlCommand();
    
                String instruccion = "SELECT MAX(studentID) as maximo FROM students";
    
    
                comando.CommandType = CommandType.Text;
                comando.CommandText = instruccion;
                comando.Connection = clases.conexion.conex();            
                comando.ExecuteNonQuery();
                SqlDataReader dr;
                dr = comando.ExecuteReader();
    
                while (dr.Read())
                {
    
    
                    string ultimo_dato = dr["maximo"].ToString();
    
                    label1.Text = ultimo_dato;
    
    
                }
    
            }
    
    
            private void Form1_Load(object sender, EventArgs e)
            {
                mostrar_ultimo_Dato();
    
            }


    • Marcado como respuesta joel201022 lunes, 18 de febrero de 2019 20:58
    lunes, 18 de febrero de 2019 20:18
  • Hola ReyneerLeon:

    comando.ExecuteNonQuery(); SqlDataReader dr; dr = comando.ExecuteReader();

    Para obtener un valor, supongo que será mejor ExecuteScalar y no llamar dos veces al  "comando", amen de facilitarle una SqlConnection o lo que corresponda.

    Tu código no puede ser funcional. Revisalo, que a lo mejor has trasladado algo diferente de lo que esperabas.

    https://docs.microsoft.com/es-es/dotnet/api/system.data.sqlclient.sqlcommand.executescalar?view=netframework-4.7.2

    https://docs.microsoft.com/es-es/biztalk/adapters-and-accelerators/adapter-sql/executenonquery-executereader-and-executescalar-using-the-sql-adapter

    lunes, 18 de febrero de 2019 20:30
  • Hola ReyneerLeon:

    comando.ExecuteNonQuery(); SqlDataReader dr; dr = comando.ExecuteReader();

    Para obtener un valor, supongo que será mejor ExecuteScalar y no llamar dos veces al  "comando", amen de facilitarle una SqlConnection o lo que corresponda.

    Tu código no puede ser funcional. Revisalo, que a lo mejor has trasladado algo diferente de lo que esperabas.

    https://docs.microsoft.com/es-es/dotnet/api/system.data.sqlclient.sqlcommand.executescalar?view=netframework-4.7.2

    https://docs.microsoft.com/es-es/biztalk/adapters-and-accelerators/adapter-sql/executenonquery-executereader-and-executescalar-using-the-sql-adapter

    Acabo de leer los links, sí y tienes razon. Nunca en mi vida he escuchado ese tal "ExecuteScalar". Pero bueno..., al menos el código que dí si devuelve la última fila según lo tengo probado.

    lunes, 18 de febrero de 2019 20:44
  • saludos,

    me esta dando error en esta linea

    comando.Connection = clases.conexion.conex();  

    podrias ser un poquito mas especifico porfavor ?


    joel

    miércoles, 20 de febrero de 2019 16:03
  • me esta dando error en esta linea

    comando.Connection = clases.conexion.conex();  

    Esa llinea es la forma "abreviada" en la que el autor te estaba diciendo "mete dentro del comando.Connection la cadena de conexion adecuada para tu base de datos".

    En otras palabras, tendrias que poner algo asi:

    comando.Connection = "Aqui hay que poner una cadena de conexion";

    Para no dejar las cadenas de conexion repartidas por todo el codigo, es razonable escribir una unica subrutina que la devuelva y eso es lo que habia hecho el autor de la respuesta dentro de clases.conexion.conex().

    En cualquier caso, ¿qué hay que poner dentro de "Aqui hay que poner una cadena de conexion"? Pues nadie te lo puede decir sin conocer con todo detalle cuál es tu base de datos: tipo, nombre de servidor, nombre de base de datos, credenciales, etc etc. Con toda esa información se ensambla la cadena.

    • Marcado como respuesta joel201022 miércoles, 20 de febrero de 2019 18:08
    miércoles, 20 de febrero de 2019 17:27
  • gracias, si tengo mi cadena de conexion lo que me confundia era que decia "clases"

    muchas gracias por la respuesta


    joel

    miércoles, 20 de febrero de 2019 18:08