Linq Insert problema para Iniciantes
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".
Solução
Você deve escrever assim
dc.ExecuteCommand(@"INSERT INTO [Order] (ID,OrderDate) VALUES ({0}, {1})", this.ID, this.OrderDate);
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.