2009-10-25 5 views
0

Pourquoi cette chose ne fonctionne pas?Linq problème d'insertion pour les débutants

[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". 

Répondre

3

Vous devriez écrire comme ça

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

Check MSDN

Il dit

Cette méthode est un mécanisme de transfert direct pour les cas où LINQ to SQL ne fournit pas de manière adéquate un scénario particulier .

La syntaxe de la commande est presque la même que la syntaxe utilisée pour créer un ADO.NET DataCommand. La seule différence réside dans la manière dont les paramètres sont spécifiés. Plus précisément, vous spécifiez les paramètres en les encadrant entre accolades ({...}) et en les énumérant à partir de 0. Le paramètre est associé à l'objet également numéroté dans le tableau de paramètres. L'exemple suivant ouvre une connexion et transmet une commande SQL UPDATE au moteur SQL.

+0

Ceci est étrange. – anonymous

Questions connexes