الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة عند حذف الصفوف المتكرره من الداتا بيس

بدأه صاحبة السمو في 15 أكتوبر 2008 · 7 رد · 1,030 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخواني الكرام

عندي داتا بيس من نوع my sql

واقوم بحذف الصفوف المتكرره فيها باستخدام الكود التالي

SQL = "Delete a.* from in_out as a inner join (Select id , date , time , state , MIN(log_no) as nID From(in_out) Group by id, date, time, state Having Count(*) > 1 ) as b on a.id = b.id  And a.date = b.date And a.time = b.time And a.state = b.state And b.nID <> a.log_no"

المشكلة انه ياخد وقت طويل لتنفيذ الكود

وغاليا ما يتوقف البرنامج ويرجع الرساله التاليه

Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

مع العلم ان الكود صحيح وقد قمت بتجربته على الداتا بيس مباشرا وكان يعمل بشكل صحيح ولكن ياخد وقت اشوي طويل لانو يقوم بعمليه المقارنه

ولكن عند استخدم نفس المود فانه يرجع رساله الخطا السابقه

فما الحل في هذه المشكله

1145392391.gif
#2

الكود صحيح و لكن في حالة وجود كمية كبيرة من البيانات تأخذ وقت طويل و ربما تحتاج الي زيادة ال command.CommandTimeout الي قيمة اكبر

او استخدام Asynchronous Execution in ADO.NET 2.0

و جرب الكود بهذا التعديل الطفيف ربما يفيد

SQL = "Delete a.* from in_out as a inner join (Select id , MIN(log_no) as nID From(in_out) Group by id Having Count(*) > 1 ) as b on a.id = b.id  And a.date = b.date And a.time = b.time And a.state = b.state And b.nID <> a.log_no"

تم تعديل هذه المشاركة بواسطة AhmedElbaz في 15 أكتوبر 2008 في 21:29

#3

شكرا اخي الكريم

ولكن

هل يمكن ان تعطيني اشوي معلومات او شرح لكي اقوم بعم المطلوب

الصراحه خبرتي قليله فيما ذكرت

فكيف يمكنني ان اقوم بزياده

ال command.CommandTimeout الي قيمة اكبر

او هل من الممكن ان تشرح لنا بشكل مبسط

Asynchronous Execution in ADO.NET 2.0

لكي اقوم بتجربتها

فيما يخص الكود فانه لا يعمل وقد قمت بتجربته من قبل ولا يعمل الكود الا بالطريقه التى كتبتها في المشاركة الاولى

وكما ذكر فان كميه البيانات كثيره فكيف يمكنني حل هذه المشكله

1145392391.gif
#4

اي data provider بتستخدم مع ال mySql يعني مثلا ال SqlCommand انت بتستخدم ايه بدله

ال CommandTimeout عبارة عن خاصية في ال SqlCommand

#5

استخدم

Dim deleteCommand As New MySqlCommand

ولكن كم القيمة المفروض ان اضعها وكم تكون القيمة الاعتيادية

وهل تغيير هذه القيمة يساعد على سرعة العملية

او هل هناك طريقه لكي اجعل هذه العمليه تتم بوقت اسرع

1145392391.gif
#6

الفكرة انه ربما يوجد امر يحتاج الي وقت طويل للتنفيذ و ال time out الافتراضي 30 ثانية و لجعل ال compiler او البرنامج ينتظر مده اكبر من ذلك يجب تغير MySqlCommand.CommandTimeOut و هي قيمة int

حاول تجرب القيمة المناسبة و التي تتناسب مع كمية البيانات

#7

اخي الكريم

انا كتبت الكود التالي

deleteCommand.CommandTimeout = 50000

ولاحظت ان البرنامج ياخد وقت طويل للغايه ولم ينتهي بعد فقمت بايقاف التشغيل

وعند مراجعة قاعده البيانات اتضح لي ان العملية تمت

فهل يوجد طريقه لتقليل زمن العمليه

1145392391.gif
#8
اقتباس
deleteCommand.CommandTimeout = 50000

50000 كتير جدا

مرة اخري ليست المشكلة في تنفيذ الامر في قاعدة البيانات و لكن عدم انتظار البرنامج لعودة نتيجة الاستعلام فقط و لان ال timeout قليل بشكل افتراضي فيتم انهاء الامر من قبل البرنامج و يقوم بتنفيذ باقي البرنامج

و لذلك ممكن تستخدم Asynchronous Execution

اقرأ عن الموضوع

Asynchronous Execution in ADO.NET 2.0

Asynchronous Command Execution in ADO.Net 2.0

ليس لدي علم ب MySQL data provider

تم تعديل هذه المشاركة بواسطة AhmedElbaz في 16 أكتوبر 2008 في 13:52

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…