Вопрос

Почему эта штука не работает?

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

Этот код генерирует исключение

Must declare the scalar variable "@ID".
Это было полезно?

Решение

Вы должны написать это так

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

Проверить MSDN

Там написано

  

Этот метод является сквозным   механизм для случаев, когда LINQ to SQL   не обеспечивает адекватно   конкретный сценарий.

     

Синтаксис команды почти   такой же, как синтаксис, используемый для создания   ADO.NET DataCommand. Единственный   Разница в том, как параметры   указаны. В частности, вы   указать параметры, заключив их   в фигурных скобках ({& # 8230;}) и перечислить их   начиная с 0. Параметр   ассоциируется с одинаково пронумерованными   объект в массиве параметров.

     

В следующем примере открывается   соединение и передает SQL ОБНОВЛЕНИЕ   команда для движка SQL.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top