Problème d'insertion de Linq pour les débutants
Question
Pourquoi cette chose ne fonctionne-t-elle pas?
[Database(Name="Relationships_Test")]
[Table(Name = "Order")]
public class Order
{
[Column(Name="ID", IsPrimaryKey=true)]
public int ID { get; set; }
[Column(Name = "OrderDate")]
public DateTime OrderDate { get; set; }
public void Save()
{
DataContext dc = new DataContext(@"Data Source=.\sqlexpress;Initial Catalog=Relationships_Test;Integrated Security=True");
dc.ExecuteCommand(@"INSERT INTO [Order] (ID,OrderDate) VALUES (@ID,@OrderDate)", this.ID, this.OrderDate);
}
}
Order o = new Order();
o.ID = 3;
o.OrderDate = DateTime.Parse("12/31/2999");
o.Save();
Ce code génère une exception
Must declare the scalar variable "@ID".
La solution
Vous devriez l'écrire comme ceci
dc.ExecuteCommand (@ "INSERT INTO [Order] (ID, OrderDate) VALEURS ({0}, {1})", this.ID, this.OrderDate);
Il est dit
Cette méthode est un pass-through mécanisme pour les cas où LINQ to SQL ne prévoit pas de manière adéquate une scénario particulier.
La syntaxe de la commande est presque la même chose que la syntaxe utilisée pour créer un ADO.NET DataCommand. Le seul la différence réside dans la façon dont les paramètres sont spécifiés. Plus précisément, vous spécifier des paramètres en les entourant entre accolades ({…}) et les énumérer à partir de 0. Le paramètre est associé à la même numérotation objet dans le tableau de paramètres.
L'exemple suivant ouvre une connexion et passe un UPDATE SQL commande au moteur SQL.