문제

이게 작동하지 않는 이유는 무엇입니까?

[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에서 SQL이 특정 시나리오를 적절하게 제공하지 않는 경우에 대한 통과 메커니즘입니다.

명령의 구문은 ADO.NET Datacommand를 만드는 데 사용되는 구문과 거의 동일합니다. 유일한 차이점은 매개 변수를 지정하는 방법입니다. 구체적으로, 당신은 매개 변수를 버팀대 ({…})로 둘러싸고 0에서 시작하여 열거하여 매개 변수를 지정합니다. 매개 변수는 매개 변수 배열에서 동일 번호가 매겨진 객체와 연관됩니다.

다음 예제는 연결을 열고 SQL 업데이트 명령을 SQL 엔진으로 전달합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top