ultimo obtener last_insert_id insertado ident_current after c# sql-server

c# - obtener - select @@identity sql server



SQL Server y C#: obtener el Ășltimo ID insertado (8)

Cláusula de salida?

string query = "INSERT INTO SocialGroup (created_by_fbuid) OUTPUT INSERTED.IDCol --use real column here VALUES (@FBUID)"; ... int lastId = (int)command.ExecuteScalar();

public static void CreateSocialGroup(string FBUID) { string query = "INSERT INTO SocialGroup (created_by_fbuid) VALUES (@FBUID); SELECT @@IDENTITY AS LastID"; using (SqlConnection connection = new SqlConnection(ConnectionString)) { SqlCommand command = new SqlCommand(query, connection); command.Parameters.AddWithValue("@FBUID", FBUID); connection.Open(); command.ExecuteNonQuery(); } }

¿Esta es la manera correcta de hacerlo? ¿Y cómo obtengo LastID en una variable? Gracias


Personalmente, reescribiría su código para usar Parámetros. Puede usar un parámetro InputOutput o un parámetro de Output . Sin embargo, el uso de un valor de retorno en su SQL también funcionaría.

Se pueden encontrar ejemplos completos sobre esto en MSDN .

También usaría Scope_Identity() lugar de @@Identity Esto asegurará que revele la ID que se relaciona con la transacción actual. Los detalles sobre Scope_Identity se pueden encontrar aquí .


Puede usar ExecuteScalar para obtener el último valor de un Sqlcommand.

La función scope_identity () es más segura que @@ identity.


Recomiendo usar un procedimiento almacenado para hacer esto. Puede asignarle un parámetro de OUTPUT que puede usar para devolver el valor de id a su aplicación.


Si su servidor admite la OUTPUT clause , puede intentarlo con este:

public static void CreateSocialGroup(string FBUID) { string query = "INSERT INTO SocialGroup (created_by_fbuid) OUTPUT INSERTED.IDENTITYCOL VALUES (@FBUID)"; using (SqlConnection connection = new SqlConnection(ConnectionString)) { SqlCommand command = new SqlCommand(query, connection); command.Parameters.AddWithValue("@FBUID", FBUID); connection.Open(); var _id = command.ExecuteScalar(); } }


U puede probar ExecuteScalar para obtener el valor LastID.


Use el Stored Procedure solo para las consultas y use SCOPE_IDENTITY para obtener el valor máximo.


SqlCommand command = new SqlCommand("select max(id) from SocialGroup ", connection); int lastId = (int)command.ExecuteScalar();