Pregunta

¿Por qué esto no funciona?

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

Este código genera una excepción

Must declare the scalar variable "@ID".
¿Fue útil?

Solución

Deberías escribirlo de esta manera

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

Check MSDN

Dice

  

Este método es un paso a través   Mecanismo para casos donde LINQ to SQL.   no prevé adecuadamente una   Escenario particular.

     

La sintaxis del comando es casi   La misma sintaxis utilizada para crear.   un comando de datos ADO.NET. Lo único   La diferencia está en cómo los parámetros.   se especifican Concretamente usted   especificar los parámetros encerrándolos   entre llaves ({& # 8230;}) y enuméralas   a partir de 0. El parámetro es   asociado con el igual numerado   objeto en la matriz de parámetros.

     

El siguiente ejemplo abre un   conexión y pasa una actualización de SQL   comando al motor SQL.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top