none
Obtener el último ID de un registro de mi base de datos Sql y mostrarlo en un mensaje de un form en C# RRS feed

  • Pregunta

  • Mi duda es si es posible obtener el ID de mi último registro en la parte donde dice: MessageBox.Show($"La persona fue ingresada con el id..." Es un ID identity,es una aplicación que solo utilizará la misma persona siempre. Se que ese dato lo puedo obtener con  SCOPE_IDENTITY(), pero no tengo ni idea de como declararlo en mi codigo para obtener el dato ya que voy empezando.Tengo que crear una nueva clase? algun nuevo metodo? declarar una nueva variable?

    De antemano mil gracias por responder, es mi primer pregunta en el foro, espero no molestar con ello.

    Aqui mi codigo:

    private void Btn1_Click_1(object sender, EventArgs e) { SqlConnection conexion = new SqlConnection("Mi cadena de conexion"); conexion.Open(); string query = "INSERT INTO dbo.Tb1 (Nombre,Direccion,Telefono,Correo,Interes,Monto,Vence) VALUES (@Nombre,@Direccion,@Telefono,@Correo,@Interes,@Monto,@vence)"; SqlCommand comando = new SqlCommand(query, conexion); comando.Parameters.AddWithValue("@Nombre", Txtbox2.Text); comando.Parameters.AddWithValue("@Direccion", Txtbox3.Text); comando.Parameters.AddWithValue("@Telefono", Txtbox4.Text); comando.Parameters.AddWithValue("@Correo", Txtbox5.Text); comando.Parameters.AddWithValue("@Interes", Txtbox6.Text); comando.Parameters.AddWithValue("@Monto", Txtbox7.Text); comando.Parameters.AddWithValue("@Vence", DateTimePicker1.Value); comando.ExecuteNonQuery(); conexion.Close(); MessageBox.Show($"La persona fue ingresada, su id es ");

     comando.Parameters.AddWithValue("@IdPrestamo", Txtbox1.Text);
                int id = Convert.ToInt32(comando.ExecuteScalar());
                SELECT ID = SCOPE_IDENTITY()
    }

    viernes, 15 de marzo de 2019 2:24

Respuestas

  • Lo modifique de esta manera pero no se como llamarlo.

    private void Btn1_Click_1(object sender, EventArgs e)
            {
                SqlConnection conexion = new SqlConnection("MI CADENA DE CONEXION");
                conexion.Open();

                int IdRegistro = 0;

                string query = "INSERT INTO dbo.Tb1 ( Nombre,Direccion,Telefono,Correo,Interes,Monto,Vence) VALUES (@Nombre,@Direccion,@Telefono,@Correo,@Interes,@Monto,@vence) + @SELECT SCOPE_IDENTITY()";
                SqlCommand comando = new SqlCommand(query, conexion);
                
                comando.Parameters.AddWithValue("@Nombre", Txtbox2.Text);
                comando.Parameters.AddWithValue("@Direccion", Txtbox3.Text);
                comando.Parameters.AddWithValue("@Telefono", Txtbox4.Text);
                comando.Parameters.AddWithValue("@Correo", Txtbox5.Text);
                comando.Parameters.AddWithValue("@Interes", Txtbox6.Text);
                comando.Parameters.AddWithValue("@Monto", Txtbox7.Text);
                comando.Parameters.AddWithValue("@Vence", DateTimePicker1.Value);

                comando.ExecuteNonQuery();

                comando.Parameters.AddWithValue("@IdPrestamo", Txtbox1.Text);
                IdRegistro= Convert.ToInt32(comando.ExecuteScalar());
                
                                     
              
                conexion.Close();
                MessageBox.Show($"La persona fue ingresada, su id es ", + );
            }
        }
    }

    • Marcado como respuesta M Zav domingo, 28 de julio de 2019 17:35
    viernes, 15 de marzo de 2019 2:44
  • Hola, ese valor lo recuperas al momento de hacer el insert

    string query = @"INSERT INTO dbo.Tb1 (Nombre,Direccion,Telefono,Correo,Interes,Monto,Vence) 
                    VALUES (@Nombre,@Direccion,@Telefono,@Correo,@Interes,@Monto,@vence) 
    				SELECT SCOPE_IDENTITY()";

    y lo recuperas con el ExecuteScalar (tal como lo estabas haciendo) que siempre te dará el valor de la primera fila y columna del conjunto de resultados que devuelve la consulta

     int id = Convert.ToInt32(comando.ExecuteScalar());

    por último para mandar el mensaje

    MessageBox.Show("La persona fue ingresada, su id es " + Convert.toString(id) );


    Votar y marcar respuestas es agradecer.
    Saludos.
    Lima-Perú


    • Editado Augusto1982 viernes, 15 de marzo de 2019 2:56
    • Marcado como respuesta M Zav domingo, 28 de julio de 2019 17:35
    viernes, 15 de marzo de 2019 2:53
  • Muchisimas gracias hermano!! Hice el ajuste como me lo comentas y ya funciona perfecto. Bueno me seguia marcando el error:"Id its already declared in this scope" Lo que hice solo fue quitarle el  "int" quedando de la siguiente manera mi codigo:

    idPrestamo = Convert.ToInt32(comando.ExecuteScalar());

    Y ejecute la app y ya funciona, valide en mi base de datos y efectivamente ya arroja el valor que corresponde al ultimo registro.

    Mil gracias!!

    • Marcado como respuesta M Zav domingo, 28 de julio de 2019 17:36
    viernes, 15 de marzo de 2019 3:11

Todas las respuestas

  • Lo modifique de esta manera pero no se como llamarlo.

    private void Btn1_Click_1(object sender, EventArgs e)
            {
                SqlConnection conexion = new SqlConnection("MI CADENA DE CONEXION");
                conexion.Open();

                int IdRegistro = 0;

                string query = "INSERT INTO dbo.Tb1 ( Nombre,Direccion,Telefono,Correo,Interes,Monto,Vence) VALUES (@Nombre,@Direccion,@Telefono,@Correo,@Interes,@Monto,@vence) + @SELECT SCOPE_IDENTITY()";
                SqlCommand comando = new SqlCommand(query, conexion);
                
                comando.Parameters.AddWithValue("@Nombre", Txtbox2.Text);
                comando.Parameters.AddWithValue("@Direccion", Txtbox3.Text);
                comando.Parameters.AddWithValue("@Telefono", Txtbox4.Text);
                comando.Parameters.AddWithValue("@Correo", Txtbox5.Text);
                comando.Parameters.AddWithValue("@Interes", Txtbox6.Text);
                comando.Parameters.AddWithValue("@Monto", Txtbox7.Text);
                comando.Parameters.AddWithValue("@Vence", DateTimePicker1.Value);

                comando.ExecuteNonQuery();

                comando.Parameters.AddWithValue("@IdPrestamo", Txtbox1.Text);
                IdRegistro= Convert.ToInt32(comando.ExecuteScalar());
                
                                     
              
                conexion.Close();
                MessageBox.Show($"La persona fue ingresada, su id es ", + );
            }
        }
    }

    • Marcado como respuesta M Zav domingo, 28 de julio de 2019 17:35
    viernes, 15 de marzo de 2019 2:44
  • Hola, ese valor lo recuperas al momento de hacer el insert

    string query = @"INSERT INTO dbo.Tb1 (Nombre,Direccion,Telefono,Correo,Interes,Monto,Vence) 
                    VALUES (@Nombre,@Direccion,@Telefono,@Correo,@Interes,@Monto,@vence) 
    				SELECT SCOPE_IDENTITY()";

    y lo recuperas con el ExecuteScalar (tal como lo estabas haciendo) que siempre te dará el valor de la primera fila y columna del conjunto de resultados que devuelve la consulta

     int id = Convert.ToInt32(comando.ExecuteScalar());

    por último para mandar el mensaje

    MessageBox.Show("La persona fue ingresada, su id es " + Convert.toString(id) );


    Votar y marcar respuestas es agradecer.
    Saludos.
    Lima-Perú


    • Editado Augusto1982 viernes, 15 de marzo de 2019 2:56
    • Marcado como respuesta M Zav domingo, 28 de julio de 2019 17:35
    viernes, 15 de marzo de 2019 2:53
  • Muchisimas gracias hermano!! Hice el ajuste como me lo comentas y ya funciona perfecto. Bueno me seguia marcando el error:"Id its already declared in this scope" Lo que hice solo fue quitarle el  "int" quedando de la siguiente manera mi codigo:

    idPrestamo = Convert.ToInt32(comando.ExecuteScalar());

    Y ejecute la app y ya funciona, valide en mi base de datos y efectivamente ya arroja el valor que corresponde al ultimo registro.

    Mil gracias!!

    • Marcado como respuesta M Zav domingo, 28 de julio de 2019 17:36
    viernes, 15 de marzo de 2019 3:11