سؤال

حسنا, أنا باستخدام SQL Server Express 2008 .Net framework 3.5 (c#)

لدي بضعة من التاريخ والوقت الحقول في قاعدة البيانات و أحاول جعل تحرير صف (باستخدام Linq إلى Sql) كنت تتلقى خطأ "الصف لم يتم العثور على أو تغييرها."

لقد قضيت بعض الوقت في الحصول على SQL التي تم إنشاؤها ويبدو أن المشكلة ناتجة عن أجزاء من الثانية مرفقة التاريخ والوقت.

ولدت SQL التي لا تعمل ،

 @p5: Input DateTime (Size = 0; Prec = 0; Scale = 0) [20/10/2009 16:04:45]
 @p6: Input DateTime (Size = 0; Prec = 0; Scale = 0) [23/10/2009 10:15:36]
 @p7: Input DateTime (Size = 0; Prec = 0; Scale = 0) [23/10/2009 09:27:27]

AND ([SignUpDate] = @p5) 
AND ([LastActivityDate] = @p6) 
AND ([LastLoginDate] = @p7) 

إذا كنت تعديله نفسي هكذا يعمل ،

 @p5: Input DateTime (Size = 0; Prec = 0; Scale = 0) [20/10/2009 16:04:45.390]
 @p6: Input DateTime (Size = 0; Prec = 0; Scale = 0) [23/10/2009 10:15:36.733]
 @p7: Input DateTime (Size = 0; Prec = 0; Scale = 0) [23/10/2009 09:27:27.747]

AND ([SignUpDate] = @p5) 
AND ([LastActivityDate] = @p6) 
AND ([LastLoginDate] = @p7) 

ما هي الخيارات المتاحة في طرق الحصول على حول هذا ؟

فقط لإضافة هذا هو بلدي تحرير التعليمات البرمجية ،

var UserToEdit = this.GetUser(UserId);

UserToEdit.Forename = Fields["Forename"];
UserToEdit.Surname = Fields["Surname"];
UserToEdit.DateOfBirth = Convert.ToDateTime(Fields["DateOfBirth"]);
UserToEdit.DisplayName = Fields["DisplayName"];
UserToEdit.TelephoneNumber = Fields["TelephoneNumber"];

_db.SubmitChanges();
هل كانت مفيدة؟

المحلول

وانظر هذا الرابط،

System.Data.Linq.ChangeConflictException: صف لم يتم العثور أو تغييرها

<اقتباس فقرة>
# High precision datetime fields are used. The solution is to set
     

وUpdateCheck أبدا لهذا العمود   ملف DBML بك

لقد حل هذه المشكلة بلدي لكنها لا تشعر قليلا مثل الإختراق.

وأنا أغادر هذا مفتوحا لمعرفة آراء الآخرين.

نصائح أخرى

هذا المنصب ، وهذا ما يفسر أننا بحاجة إلى إبقاء العين في أعمدة التاريخ والوقت، تحقق من وجود أنواع مختلفة من البيانات بين DBML وقاعدة البيانات الخاصة بك، وأخيرا، يوضح نهج التوافق الأمثل ينق.

where foo.SignupDate >= signUpDate
  && foo.SignUpDate < signUpDate.AddSeconds(1)
  && foo.LastActivityDate >= lastActivityDate 
  && foo.LastActivityDate < lastActivityDate.AddSeconds(1)
  && foo.LastLoginDate >= lastActivityDate 
  && foo.LastLoginDate < lastActivityDate.AddSeconds(1)

ومنذ والفرق الوحيد في المثال الخاص بك هو ميلي ثانية ثم أود أن استخدام SQL التعريف لتحديد ما إذا كان ميلي ثانية عودة حدد الأصلية. ثم نرى ما اذا كان يمكنك إصلاح هذه المسألة. ويبدو أن البيانات صف يحتوي ميلي ثانية ولكن لديك حدد لا تعود لهم.

وبعد القيام بذلك وأنت لا تزال لديها قضية يمكننا أن نرى ما هي الخطوة القادمة ستكون.

الأساس MSSQL مخطط Linq سياق البيانات لا تعمل بشكل جيد معا في ذكر التكوين.يمكنك إما تغيير DB schema أو البيانات السياق.

تغيير نوع البيانات MSSQL

نحن نستخدم smalldatetime بدلا من التاريخ والوقت عندما دقة 1 دقيقة يمكن استخدامها.

تغيير LINQ to SQL سياق البيانات

إذا كنت بحاجة إلى دقة أعلى من 1 دقيقة ، انظر LiamB الخاصة جواب مجموعة UpdateCheck أبدا عمود في سياق البيانات.

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