none
Guardar el valor de una consulta dentro de una variable. RRS feed

  • Pregunta

  • Buen día a todos.

    Quiero guardar el valor de una consulta dentro de un textbox para despues usarlo. Este valor es en concreto el ultimo registro insertado.

    Inserto un registro, obtengo el Id de dicho registro, y lo que quiero hacer es guardar ese Id.

    Lo hago de la siguiente manera pero no me funciona.

    Conexion cnn = new Conexion();
    SqlConnection cn = new SqlConnection(cnn.CadenaConexion());
    EjecutaConsulta ejecuta = new EjecutaConsulta();
    
    String Query = "Hago mi insert";
    SqlCommand comand = new SqlCommand(Query, cn);
    
    cn.Open();
    comand.ExecuteNonQuery();
    cn.Close();
    
    // Hasta este punto ya inserte mi registro, ahora quiero obtener el id del ultimo registro que inserte y guardar ese valor en una variable o textbox.
    
    Query = "SELECT MAX(IdMiCampo) AS ultimoRegistro FROM tabla";
    comand = new SqlCommand(Query, cn);
    cn.Open();
    SqlDataReader reader = comand.ExecuteReader();
    if (reader.Read())
    txtNumUltReg.Text = Convert.ToString(reader);
    comand.ExecuteNonQuery();
    cn.Close();
    
    //De esta forma lo intento guardar, pero no funciona, me dice que la conexion esta cerrada y/o abierta.
    
    De antemano agradesco su ayuda.

    martes, 22 de septiembre de 2015 21:06

Respuestas

  • Hola Jonathan Bernal,

    ¿El campo IdMiCampo es IDENTITY (autogenerado)? Si es así, puedes devolver el valor insertado en la misma sentencia de Insert.

    Conexion cnn = new Conexion();
    SqlConnection cn = new SqlConnection(cnn.CadenaConexion());
    EjecutaConsulta ejecuta = new EjecutaConsulta();
    
    String Query = "INSERT INTO MiTabla VALUES (@Campo1, ...) ; SELECT SCOPE_IDENTITY()";
    SqlCommand comand = new SqlCommand(Query, cn);
    
    cn.Open();
    txtNumUltReg.Text = comand.ExecuteScalar().ToString();
    cn.Close();


    • Marcado como respuesta Jonathan Bernal martes, 22 de septiembre de 2015 22:26
    martes, 22 de septiembre de 2015 21:23

Todas las respuestas

  • Hola Jonathan Bernal,

    ¿El campo IdMiCampo es IDENTITY (autogenerado)? Si es así, puedes devolver el valor insertado en la misma sentencia de Insert.

    Conexion cnn = new Conexion();
    SqlConnection cn = new SqlConnection(cnn.CadenaConexion());
    EjecutaConsulta ejecuta = new EjecutaConsulta();
    
    String Query = "INSERT INTO MiTabla VALUES (@Campo1, ...) ; SELECT SCOPE_IDENTITY()";
    SqlCommand comand = new SqlCommand(Query, cn);
    
    cn.Open();
    txtNumUltReg.Text = comand.ExecuteScalar().ToString();
    cn.Close();


    • Marcado como respuesta Jonathan Bernal martes, 22 de septiembre de 2015 22:26
    martes, 22 de septiembre de 2015 21:23
  • hola

    pero ese campo id lo defines como identity ? porque si es asi no se usa el MAX()

     [ADO.NET] – Campos Auto numéricos

    como veras se usa el SCOPE_IDENTITY

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 22 de septiembre de 2015 21:31
  • Si efectivamente mi campo Id es IDENTITY.

    Esto me funciono a la primera, gracias.

    martes, 22 de septiembre de 2015 22:54