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

ADO.NET و SQL Server 2000 ... أسئلة حرجة..أرجو ال

مغلق
بدأه TMS في 24 يناير 2005 · 3 رد · 871 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

قررت حديثا أن أنشى برنامج يعتمد على هاتين التقنيتين و ذلك كتدريب على VB.NET بعد أن هجرت حبيبتنا القديمة VB 6 .

و لكن لم يسبق لي أن برمجت برنامج متعدد المستخدمين تعتمد على الشبكات, و قد واجهتني عدة أسئلة أساسية لم أجد لها جواب في الكتب , لذا أرجوا منكم أن تتعاونوا معي ...

1- كما نعرف يمكن تعريف المستخدمين و الصلاحيات على SQL Server في داخله, و لكن كيف مثلاً أستخرج الصلاحيات و أسماء المستخدمين لقاعدة البيانات عبر ADO, فحسب ما لاحظت أنها تسجل في جداول خاصة بالنظام يبدأ اسمها بـ sys و لكنني لم أفهم طريقة تخزينه للصلاحيات و المستخدمين .

2- قرأت عن ميزة رائعة في SQL Server و هي أنه يقوم بتسجيل كل التغيرات في قاعدة البيانات في ملف ذو لاحقة Log , تسمح لنا بالتراجع عن كل التعديلات التي حصلت على قاعدة البيانات حتى تاريخ معين في حال حصول أي عطل أو ضرر , لكنني لم أعرف كيف يمكن استخدامها .

3- تختلف الـ ADO الجديدة عن القديمة أنها تعمل بطريقة غير متصلة Disconnected Mode ( أي يتم الاتصال بقاعدة البيانات فقط عند التحديث ) و هي طريقة مفيدة جداً للشبكات الكبيرة , و لكن السؤال : إذا كان لدينا جدول من 100 ألف جدول , و كنا نريد إجراء البحث فيها بشكل متكرر عندها نكون أمام حلين على حسب ما توصلت له :

إما أن نستدعي جميع كل الجدول لمرة واحدة (في المدة القصيرة) و لكل مستخدم على حدا إلى DataSet و نبحث فيها يشكل محلي ( الأمر الذي يبطئ البرنامج و يملئ الرامات إضافة للحاجة للتحديث الجدول كل فترة )

أو أن نتصل بشكل مكثف بقاعدة البيانات عند إجراء البحث و نعود فقط بالنتائج فقط ( عندها يضيع معنى Disconnected Mode كما أن فتح الاتصال يحتاج لوقت طويل)

فهل هناك طريقة ما لتجاوز ذلك .

و المزيد ( أسف للإطالة ) إذا كان لدينا مفاتيح في الجدول ذو ترقيم تلقائي, و لو أننا أضفنا سجل جديد و فعل الشيء ذاته مستخدم أخر , و بفرض أننا استخدمنا الطريقة الأولى في الربط) فقد يحدث هناك تضارب في الأرقام التسلسلية عند تحديث قاعدة البيانات ! أما أن الترقيم لا يتم فعلياً إلا عند التحديث.

أظن أنها أسئلة منطقية , و مرة أخره أسف للإطالة , و لكنني عجزت عن إكمال المشروع دون معرفة طبيعة هذه الأسئلة .

newslatterlogo.jpg
#2

السلام عليكم ورحمة الله وبركاته

أخى العزيز

موضوعك قبل ما يكون محرج هو مركب وطويل - مش هقدر أرد عليه كله - رحم الله أمرئ عرف قدر نفسه

لكن أختار منه السؤال الثالث: ردا على كلامك

اقتباس
و لكن السؤال : إذا كان لدينا جدول من 100 ألف جدول , و كنا نريد إجراء البحث فيها بشكل متكرر عندها نكون أمام حلين على حسب ما توصلت له :

إما أن نستدعي جميع كل الجدول لمرة واحدة (في المدة القصيرة) و لكل مستخدم على حدا إلى DataSet و نبحث فيها يشكل محلي ( الأمر الذي يبطئ البرنامج و يملئ الرامات إضافة للحاجة للتحديث الجدول كل فترة )

أو أن نتصل بشكل مكثف بقاعدة البيانات عند إجراء البحث و نعود فقط بالنتائج فقط ( عندها يضيع معنى Disconnected Mode كما أن فتح الاتصال يحتاج لوقت طويل)

فهل هناك طريقة ما لتجاوز ذلك

كلامك صح فى أغلبه لو كان البحث يضطرك لتعبأة الداتاسيت كل مرة هتزيد الترافيك وتصبح الديسكونكتد زى قلتها، بس أنت من الأول مخيّر أنك تشتغل متصل أو غير متصل، صح؟

لو طبيعة البيانات بتاعتك محتاجة أنها تكون (على الهوا) زى مثلا البنوك وتذاكر الطيران وأمثالها بلاش تشتغل على المنفصل لأنك بتعمل Fill كل فترة فهتلاقى Goastes وبيانات غير دقيقة - فبذلك أنت مضطر للعمل متصلاز

خلاف ذلك إذا كان ما بين الـ Fill و الـFill مش هتقوم الدنيا وتقعد - آسف لو اللفظ زعلك - يبقى الأفضل لك تشتغل منفصل.

يعنى منفصل دى خدمة للناس اللى بتحتاج تقارير مش شرط أنها تكون بتتغير خلال الثانية الواحدة - لأنك ممكن تحدث بياناتك براحتك حسب ضغط الحركة على السيرفر ، أرحم من الأول كنت مضطر تحدثها وتتصل كل ما تعوز حاجة من السيرفر - يعنى تخفيف أحمال.

كمان موضوع البحث فى عدد من الجداول - مش عارف يوصلوا 100 ألف ولا لأ - أصبح أسهل أنك تعملها على الداتاسيت على جهازك بدلا من ذهابك وإيابك على السيرفر لكل جدول ويا عالم هم من نفس المصدر ولا كل واحد له مورد مختلف ، فهذه ميزة أكبر أنك تحصل على حزمة من البيانات متجمعة على مكان واحد وتعمل التقارير اللى عاوزها فى لحظة وتحدث فيها براحتك ومرة واحدة تطبق التحديث على البيانات الفعلية بعد ما تجهز نفسك للتعارض Confliction

أما موضوع الترقيم التلقائى فزى ما تفضلت بأنه لا يتأثر إلا عند التحديث من تلقاء نفسه

أسأل الله أن أستطيع الرد على أي من الأسئلة الباقية بكود مناسب

عن عبدالله بن عمر رضي الله عنهما أن رسول الله صلى الله عليه وسلم قال :

( أحب الناس إلى الله أنفعهم ، وأحب الأعمال إلى الله عز وجل سرور تدخله على مسلم ، أو تكشف عنه كربة ، أو تقضي عنه دينا ، أو تطرد عنه جوعا ، ولأن أمشي مع أخي المسلم في حاجة أحب إليّ من أن اعتكف في المسجد شهرا ، ومن كف غضبه ستر الله عورته ، ومن كظم غيظا ، ولو شاء أن يمضيه أمضاه ، ملأ الله قلبه رضا يوم القيامة ، ومن مشى مع أخيه المسلم في حاجته حتى يثبتها له ، أثبت الله تعالى قدمه يوم تزل الأقدام ، وإن سوء الخلق ليفسد العمل كما يفسد الخل العسل )

رواه الطبراني في الكبير

#3

أعتقد أن ماتتحدث عنه له علاقة باستراتيجيات الوصول للبيانات وستجد على هذا الرابط بعض التوصيات:

توصيات حول استراتيجيات الوصول للبيانات

تحياتي للجميع.

#4

إجابة النقطه الاولى :

اقتباس
لكن كيف مثلاً أستخرج الصلاحيات و أسماء المستخدمين لقاعدة البيانات عبر ADO

كيف يمكن تحديد أن المستخدم يمكنة التعديل, how check is has update perrmission

إجابة النقطه الثانية :

اقتباس
ميزة رائعة في SQL Server و هي أنه يقوم بتسجيل كل التغيرات في قاعدة البيانات في ملف ذو لاحقة Log , تسمح لنا بالتراجع عن كل التعديلات التي حصلت على قاعدة البيانات حتى تاريخ معين في حال حصول أي عطل أو ضرر , لكنني لم أعرف كيف يمكن استخدامها

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

إجابة النقطه الثالثه :

اقتباس
و لكن السؤال : إذا كان لدينا جدول من 100 ألف جدول , و كنا نريد إجراء البحث فيها بشكل متكرر

افضل إنشاء View ثم تتعامل معاه من داخل ال ADO.Net فى حال كنت تعلم الاستعلامات التى سيتم تنفيذها ثم استدعائها كالتالى

Dim myDataView As New DataView()
myDataView.Table = myDataTable

إجابة النقطه الرابعه :

اقتباس
إذا كان لدينا مفاتيح في الجدول ذو ترقيم تلقائي, و لو أننا أضفنا سجل جديد و فعل الشيء ذاته مستخدم أخر , و بفرض أننا استخدمنا الطريقة الأولى في الربط) فقد يحدث هناك تضارب في الأرقام التسلسلية عند تحديث قاعدة البيانات

يمكنك التعامل مع اوامر ال SQL داخل Transaction و من ثم تحديد مستوى العزل Isolation Level لهذا ال Transaction و منها ما يمنع المشكله التى تحدثت عنها باعلى بالاضافه للعديد من المشاكل الاخرى مثل ال Phantom Read و هى قراءة سجل محذوف او قراءة بيانات اثناء التعديل عليها او ادخال سجلات اثناء عملية العرض كلها مشاكل يمكنك تلافيها باستخدام عملية العزل لل Transaction

تم تعديل هذه المشاركة بواسطة طارق إبراهيم في 4 فبراير 2005 في 09:16

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

هذا الموضوع مغلق.

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