Problema di inserimento Linq per principianti
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".
Soluzione
Dovresti scriverlo in questo modo
dc.ExecuteCommand (@ " INSERT INTO [Order] (ID, OrderDate) VALUES ({0}, {1}) " ;, this.ID, this.OrderDate);
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.