Domanda

Perché questa cosa non funziona?

[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();

Questo codice genera un'eccezione

Must declare the scalar variable "@ID".
È stato utile?

Soluzione

Dovresti scriverlo in questo modo

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

Controlla MSDN

Dice

  

Questo metodo è un pass-through   meccanismo per i casi in cui LINQ to SQL   non prevede adeguatamente a   scenario particolare.

     

La sintassi per il comando è quasi   lo stesso della sintassi utilizzata per creare   un DataCommand ADO.NET. Il solo   la differenza sta nel modo in cui i parametri   sono specificati. In particolare, tu   specifica i parametri racchiudendoli   tra parentesi graffe ({& # 8230;}) ed enumerarle   a partire da 0. Il parametro è   associato con ugualmente numerato   nell'array dei parametri.

     

L'esempio seguente apre a   connessione e passa un SQL UPDATE   comando al motore SQL.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top