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();