Leer un valor desde la última fila de un Servidor SQL server base de datos de CE

Tengo una base de datos con algunas columnas y uno de los que se llama ID (datatype = int).

Necesito saber el valor de la ID de la última fila (para la última fila me refiero a la última que se ha creado).

He intentado, pero me da un error de tiempo de ejecución:

string query = "SELECT * FROM Customer WHERE ID = (SELECT MAX(ID) FROM Customer)";
SqlCeCommand comSelect = new SqlCeCommand(query, connection);
SqlCeDataReader rdr = comSelect.ExecuteReader();
int ID = rdr.GetInt32(6);

(GetInt32(6) porque ID es la 6ª columna)

Gracias a todos, y lo siento por mi inglés.

P. S.

Cliente es mi tabla y el ID de set en orden ascendente. La primera fila ha creado ID = 0 la segunda ID = 1 etc.

Necesito saber el último id ya que al crear un nuevo cliente que desea establecer su ID anteriores al cliente ID+1

Errores:

Excepción del tipo ‘System.De datos.SqlServerCe.SqlCeException’ en System.Data.SqlServerCe.dll no controlada en el código de usuario

  • Y que error de tiempo de ejecución qué se obtiene?
  • Excepción del tipo ‘System.InvalidOperationException’ en System.Data.SqlServerCe.dll
  • ¿Cuál es el mensaje de la excepción?
  • publicar el mensaje de excepción y stacktrace
  • ¿Por qué no utilizar el auto increment?
  • Si usted simplemente necesita el último id, ¿por qué no simplemente ejecutar la query = «SELECT MAX(ID) FROM Cliente» ?
  • Yo espero que usted necesita para referirse GetInt32(5) si es que 6 de columna desde la columna comienza con 0 índice basado en
  • Su estrategia sería hilo inseguro, el incremento automático es el camino a seguir.
  • GetInt32(6) está a la derecha es el 7 de columnas, lo siento 😛
  • ¿Cómo puedo ejecutar esa consulta y obtener el int ?

InformationsquelleAutor Marco Cadei | 2013-08-18

2 Kommentare

  1. 4

    Dado el hecho de que, probablemente, no hay problema con la concurrencia simplemente puede obtener la última de IDENTIFICACIÓN con un ExecuteScalar llamada

    string query ="SELECT MAX(ID) FROM Customer";
    SqlCeCommand comSelect = new SqlCeCommand(query, connection);
    int ID = (int)comSelect.ExecuteScalar();

    ExecuteScalar devuelve la primera columna de la primera fila del conjunto de resultados.

    La consulta SELECT MAX(ID) devuelve sólo una fila con sólo una columna. Así ExecuteScalar encaja perfectamente en este escenario. No es necesario utilizar un ExecuteReader

    Sin embargo, la forma correcta de manejar su autoincrement escenario es el uso de una columna de IDENTIDAD que se establecerá automáticamente el siguiente valor para que al insertar un nuevo registro.
    En esta situación en la que han marcado la columna de IDENTIFICACIÓN con la IDENTIDAD de la propiedad a TRUE y, a continuación, insertar los datos en la tabla Cliente, sin pasar ningún valor para la columna ID. Después de la inserción de recuperar de inmediato el valor asignado por la base de datos para su columna de ID de

    Pseudocódigo

    string query ="INSERT INTO Customers (Name, Address, .....) VALUES (.....)";
    SqlCeCommand comInsert = new SqlCeCommand(query, connection);
    comInsert.ExecuteNonQuery();
    query ="SELECT @@IDENTITY";
    SqlCeCommand comSelect = new SqlCeCommand(query, connection);
    int ID = (int)comSelect.ExecuteScalar();
    • Muchas gracias!!! esto funcionó a la perfección ! Puede usted decirme cómo utilizar este incremento automático ? parece realmente una solución mejor 🙂
    • Establece la propiedad de IDENTIDAD de su columna y dejar la base de datos de calcular el siguiente número al insertar el registro. Recuerde que usted no necesita más para pasar un valor para este campo. Después de la inserción se puede recuperar el último valor insertado mediante la consulta SELECT @@IDENTITY
    • Gracias mucho ! soy un novato en sql 🙂
    • Me alegra ser de ayuda, y no te preocupes por el novato cosa. Al principio estábamos todos los principiantes. Vemos de nuevo en TAN
  2. 0

    Si se establece el Id y usted puede tener otros usuarios de su mejor guardar los nuevos datos y obtener la había, o todo objeto nuevo, volvió de la db por el código de ahorro de la fila. Si tratas de seguir la pista de user ids otros usuarios pueden agregar nuevos elementos y desordenar las cosas.

    Si usted tiene que conseguir el último me gustaría a partir de la base de datos, a continuación, puede utilizar @inserted en sql para obtener la última fila agregada.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea