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".
Était-ce utile?

La solution

Vous devriez l'écrire comme ceci

dc.ExecuteCommand (@ "INSERT INTO [Order] (ID, OrderDate) VALEURS ({0}, {1})", this.ID, this.OrderDate);

Vérifier MSDN .

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top