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".
War es hilfreich?

Lösung

Sie sollten es so schreiben

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

prüfen MSDN

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top