volver talk rotos peliculas pelicula online latino her embraces descargar completa broken almodovar almodobar abrazos c# sql sql-server insert

c# - talk - Volver ID en INSERT?



volver almodovar online latino (5)

¿Por qué no llamas al procedimiento de la tienda? Pase valores al procedimiento de almacenamiento para obtener los valores insertados y, desde el SP, devolver el último valor de SCOPE_IDENTITY(). insertado utilizando SCOPE_IDENTITY(). Espero que esto ayude.

Tengo una consulta INSERT y quiero que la base de datos devuelva el ID de la fila que acabo de insertar.

sqlString = "INSERT INTO MagicBoxes (OwnerID, Key, Name, Permissions, Active, LastUpdated) VALUES (@OwnerID, @BoxKey, @BoxName, 0, 1, @Date) SET @ID = SCOPE_IDENTITY();"; cmd = new SqlCommand(sqlString, con); cmd.Parameters.AddWithValue("@OwnerID", OwnerID); cmd.Parameters.AddWithValue("@BoxKey", BoxKey); cmd.Parameters.AddWithValue("@BoxName", BoxName); cmd.Parameters.AddWithValue("@Username", Username); cmd.Parameters.AddWithValue("@Date", DateTime.Now); cmd.ExecuteNonQuery();

Actualmente tengo esto, no estoy seguro de lo que debo hacer a continuación ...


Añade esto a tus parámetros

SqlParameter IDParameter = new SqlParameter("@ID",SqlDbType.Int); IDParameter.Direction = ParameterDirection.Output; cmd.Parameters.Add(IDParameter);

Después de ejecutar puedes recuperar el id.

int id = (int)IDParameter.Value;


Desde SQL Server 2008 hubo una cláusula de SALIDA agregada a la sintaxis de TSQL. Esto le permite tener los datos que se ven afectados por la consulta DML agregada al flujo de datos tabular.

Aunque consultar SCOPE_IDENTITY () después de una consulta devuelve la información correcta, obliga a SQL Server a ejecutar 2 consultas en las que la cláusula de salida lo limita a una consulta.

Sabiendo esto, la consulta que se está ejecutando se puede modificar de la siguiente manera (Suponiendo que [Id] es el nombre de la identidad):

INSERT INTO MagicBoxes (OwnerID, [Key], Name, [Permissions], Active, LastUpdated) OUTPUT INSERTED.Id VALUES (@OwnerID, @BoxKey, @BoxName, 0, 1, @Date)

Otro problema no es deshacerse de SqlCommand . La mayoría de los objetos Sql... en ADO.net implementan IDisposable y deben eliminarse adecuadamente.

Reuniendo todo, implementaría este código de la siguiente manera:

using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["db"].ConnectionString)) using (var cmd = new SqlCommand(@" INSERT INTO MagicBoxes (OwnerID, [Key], Name, [Permissions], Active, LastUpdated) OUTPUT INSERTED.Id VALUES (@OwnerID, @BoxKey, @BoxName, 0, 1, @Date) ", conn)) { cmd.Parameters.AddRange(new[] { new SqlParameter("@OwnerID", SqlDbType.Int).Value = OwnerID, new SqlParameter("@BoxKey", SqlDbType.VarChar).Value = BoxKey, new SqlParameter("@BoxName", SqlDbType.VarChar).Value = BoxName, new SqlParameter("@Date", SqlDbType.DateTime).Value = DateTime.Now }); conn.Open(); var id = (int)cmd.ExecuteScalar(); }


Solo necesita agregar @ID a la colección de parámetros y luego recuperarlo de esta manera,

cmd.Parameters.Add("@ID", SqlDbType.Int, 4).Direction = ParameterDirection.Output; cmd.ExecuteNonQuery(); //Now just read the value of: cmd.Parameters["@ID"].value

O, si prefieres esta sintaxis:

SqlParameter param = new SqlParameter("@ID", SqlDbType.Int, 4); param.Direction = ParameterDirection.Output; cmd.Parameters.Add(param);


Tienes dos opciones; usted podría declarar un parámetro de Output llamado @ID ; o - puede cambiar el final a SELECT SCOPE_IDENTITY() y simplemente usar:

int id = (int)cmd.ExecuteScalar();

Prefiero el enfoque de parámetros formales, pero ExecuteScalar funciona bien.