سؤال

لماذا هذا الشيء لا تعمل؟

[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   لا تقدم على نحو كاف ل   سيناريو معين.

     

وبناء الجملة للأمر يكاد يكون   نفس بناء الجملة تستخدم لخلق   وDataCommand ADO.NET. الوحيد   الفرق هو في كيفية المعلمات   يتم تحديد. وبوجه خاص،   تعيين معلمات من قبل بتضمينها   في الأقواس ({...}) وتعداد لهم   بدءا من 0. المعلمة غير   المرتبطة مرقمة على قدم المساواة   الاعتراض في مجموعة المعلمات.

     

والمثال التالي يفتح   اتصال ويمر UPDATE SQL   الأمر إلى محرك SQL.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top