146 votes

Exécuter la commande Insert et retourner l'Id inséré dans Sql

J'insère des valeurs dans une table SQL en utilisant C# en MVC 4. En fait, je veux insérer des valeurs et renvoyer l'ID du dernier enregistrement inséré. J'utilise le code suivant.

public class MemberBasicData
{
    public int Id { get; set; }
    public string Mem_NA { get; set; }
    public string Mem_Occ { get; set; }     
}

L'ID est automatiquement incrémenté dans la base de données lors de l'insertion.

public int CreateNewMember(string Mem_NA, string Mem_Occ )
{
    using (SqlConnection con=new SqlConnection(Config.ConnectionString))
    {
        using(SqlCommand cmd=new SqlCommand("INSERT INTO Mem_Basic(Mem_Na,Mem_Occ) VALUES(@na,@occ)",con))
        {
            cmd.Parameters.AddWithValue("@na", Mem_NA);
            cmd.Parameters.AddWithValue("@occ", Mem_Occ);
            con.Open();

            int modified = cmd.ExecuteNonQuery();

            if (con.State == System.Data.ConnectionState.Open) con.Close();
                return modified;
        }
    }
}

Je sais. ExecuteNonQuery désigne les nombres affectant la ligne. Au lieu de cela, j'utilise

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

Mais ça ne marche pas. Veuillez m'aider à résoudre ce problème. Et existe-t-il un code comme cmd.ExecuteInsertAndGetID() (ne fonctionne pas avec mon code).

0voto

Si vous utilisez EF :

 Class Person{
 public int Id {get;set;}
 public string Name {get;set;}
}

Vous définissez la valeur de Nom :

 Person p = new Person(){
  Name = "James"
};
DbContext.Persons.Add(p);
DbContext.SaveChanges();

//p.Id = new Id from database
//p.Name = James

Il suffit de l'enregistrer pour obtenir l'identité de la base de données.

-2voto

Ajay Points 6233
using(SqlCommand cmd=new SqlCommand("INSERT INTO Mem_Basic(Mem_Na,Mem_Occ) " +
    "VALUES(@na,@occ);SELECT SCOPE_IDENTITY();",con))
{
    cmd.Parameters.AddWithValue("@na", Mem_NA);
    cmd.Parameters.AddWithValue("@occ", Mem_Occ);
    con.Open();

    int modified = cmd.ExecuteNonQuery();

    if (con.State == System.Data.ConnectionState.Open) con.Close();
        return modified;
}

SCOPE_IDENTITÉ : Renvoie la dernière valeur d'identité insérée dans une colonne d'identité dans la même portée. pour plus de détails. http://technet.microsoft.com/en-us/library/ms190315.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X