Linq Insert Problem für Anfänger
Frage
Warum ist dieses Ding nicht?
[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();
Dieser Code erzeugt eine Ausnahme
Must declare the scalar variable "@ID".
Lösung
Sie sollten es so schreiben
dc.ExecuteCommand(@"INSERT INTO [Order] (ID,OrderDate) VALUES ({0}, {1})", this.ID, this.OrderDate);
Er sagt,
Dieses Verfahren ist ein Pass-Through Mechanismus für die Fälle, in denen LINQ to SQL nicht ausreichend für eine bereitstellen spezielles Szenario.
Die Syntax für den Befehl ist fast das gleiche wie die Syntax erstellt haben ein ADO.NET Datacommand. Das einzige Unterschied besteht darin, wie die Parameter spezifiziert. Insbesondere Sie legen Sie die Parameter, indem sie umschließenden in Klammern ({...}) und aufzählen sie ausgehend von 0. Der Parameter ist mit der gleichermaßen numerierten zugehörigen Objekt in dem Parameter-Array.
Das folgende Beispiel öffnet ein Verbindung und leitet eine SQL UPDATE Befehl an die SQL-Engine.