28-12-15, 12:36 PM
(آخر تعديل لهذه المشاركة : 28-12-15, 12:43 PM {2} بواسطة myalsailamy.)
السلام عليكم و رحمة الله و بركاته ،،،
سأتحدث قليلا عن طريقة التحقق من وجود سجل سابق للبيانات التي تحاول اضافتها ، وذلك لعدم اهتمام المبرمجين الكبير لهذه المشكله او الاعتماد على الاستعلام اكثر من مره حتى يتحقق من وجود بيانات مكرره ، و اغلب من يعانوا من هذه المكشله مطوري تطبيقات الويب فمجرد أن يقوم المتصفح ما لموقعك بعمل Refreash لصفحه ما فانه بذلك قد اعاد طلب الاضافة الي قاعدة البيانات و بالطبع يال المفاجئه توجد سجلات مكرره في قاعدة البيانات و في اسوأ الأحوال قد يلجأ الاخر الى تحويل المتصفح الى صفحه أخرى تظهر له رساله بان عملية الاضافة قد نجحت و كل هذا من اجل منع عملية refreash لنفس Request و البعض قد يلجأ الى الاتصال بقاعدة البيانات و التحقق و من ثما يضيف و هذه جيده و لكن لماذا لا نجعل البرنامج يتصل لمره واحده فقط و يستعلم و يضيف مره واحده ، حسنا كيف سيتم ذلك ، فرضا ان لدينا جدول بقاعدة البيانات بهذا الشكل :
فبكل بساطه ما علينا الا كتابة الاستعلام بهذه الطريقة :
الشرح بالطبع موجود بداخل جملة SQL Query ، و الان كل ما عليك انشاء استعلام بال Ado.Net يمرر القيم و ينفذ الاستعلام السابق .
هذا و الله المستعان
الرجاء من المشرفين نقل الموضوع الى المقالات SQL Server الخاص بالمنتدى الجديد
سأتحدث قليلا عن طريقة التحقق من وجود سجل سابق للبيانات التي تحاول اضافتها ، وذلك لعدم اهتمام المبرمجين الكبير لهذه المشكله او الاعتماد على الاستعلام اكثر من مره حتى يتحقق من وجود بيانات مكرره ، و اغلب من يعانوا من هذه المكشله مطوري تطبيقات الويب فمجرد أن يقوم المتصفح ما لموقعك بعمل Refreash لصفحه ما فانه بذلك قد اعاد طلب الاضافة الي قاعدة البيانات و بالطبع يال المفاجئه توجد سجلات مكرره في قاعدة البيانات و في اسوأ الأحوال قد يلجأ الاخر الى تحويل المتصفح الى صفحه أخرى تظهر له رساله بان عملية الاضافة قد نجحت و كل هذا من اجل منع عملية refreash لنفس Request و البعض قد يلجأ الى الاتصال بقاعدة البيانات و التحقق و من ثما يضيف و هذه جيده و لكن لماذا لا نجعل البرنامج يتصل لمره واحده فقط و يستعلم و يضيف مره واحده ، حسنا كيف سيتم ذلك ، فرضا ان لدينا جدول بقاعدة البيانات بهذا الشكل :
فبكل بساطه ما علينا الا كتابة الاستعلام بهذه الطريقة :
كود :
/* BEGIN COMMAND */
DECLARE @Par_LibCod_Name NVARCHAR(MAX /* Specified as 9 */) = 'محمد يحيى';
DECLARE @Par_LibCod_IsActive NVARCHAR(MAX /* Specified as 4 */) = 'true';
DECLARE @Par_LibCod_InsertDate NVARCHAR(MAX /* Specified as 10 */) = '2015-12-08';
DECLARE @Par_LibCod_UserInsert NVARCHAR(MAX /* Specified as 1 */) = '1';
/* END PARAMS */
If Not Exists( Select * FROM LibraryNodesTitle where LibCod_Name= @Par_LibCod_Name and LibCod_IsActive= @Par_LibCod_IsActive and LibCod_InsertDate= @Par_LibCod_InsertDate and LibCod_UserInsert= @Par_LibCod_UserInsert )
Begin /* البدأ بالاضافة اذا لما توجد ابيانات من قبل */
insert into LibraryNodesTitle ( LibCod_Name , LibCod_IsActive , LibCod_InsertDate , LibCod_UserInsert)
values ( @Par_LibCod_Name , @Par_LibCod_IsActive , @Par_LibCod_InsertDate , @Par_LibCod_UserInsert) ;
end
else /* تنفيذ شيء اخر */
begin /* البدأ بتنفيذ شيء اخر ، اما ارجاع رساله بان العنصر مكرر كما في هذا المثال او تعديل ...الخ*/
RAISERROR('DuplicateRecord',10,1) RETURN /* ارجاع رسالة بان القيمة مكرره */
end
/* RESULTS */
SELECT 1 as Executed;
/* END COMMAND */
الشرح بالطبع موجود بداخل جملة SQL Query ، و الان كل ما عليك انشاء استعلام بال Ado.Net يمرر القيم و ينفذ الاستعلام السابق .
هذا و الله المستعان
الرجاء من المشرفين نقل الموضوع الى المقالات SQL Server الخاص بالمنتدى الجديد
اسم معرفي : محمد يحيى