Pergunta

Por que essa coisa não está funcionando?

[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 gera uma exceção

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

Solução

Você deve escrever assim

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

Verifique MSDN

Ele diz

Este método é um pass-through mecanismo para casos em que LINQ to SQL não fornecer adequadamente para uma determinado cenário.

A sintaxe do comando é quase a mesma que a sintaxe utilizada para criar um DataCommand ADO.NET. O único diferença está em como os parâmetros são especificados. Especificamente, você especificar parâmetros colocando-os entre chaves ({...}) e enumerá-los a partir de 0. O parâmetro está associada com o igualmente numeradas objeto na matriz parâmetros.

O exemplo a seguir abre uma conexão e passa um SQL UPDATE comando para o motor SQL.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top