بيان: تم نشر هذه المقالة في "تطبيقات الكمبيوتر" المجلد 23 العدد 11
الملخص: في تطوير الأنظمة المختلفة، يعد استخدام الإجراءات المخزنة عادة جيدة، والتي لا تجلب ميزات مثل الجداول المؤقتة والوظائف والمؤشرات أيضًا أصبح تصحيح الأخطاء والترقية والصيانة أمرًا مريحًا. ومع ذلك، تكون جميع استدعاءات الإجراءات المخزنة تقريبًا في نفس الوضع، والفرق الرئيسي هو أن معلمات كل إجراء مخزن مختلفة. فهل من الممكن استخدام طريقة لتوحيد جميع استدعاءات الإجراءات المخزنة وتقليل البرمجة غير الضرورية؟ بناءً على دراسة قاعدة بيانات SQL Server وASP.NET، قمنا بتطبيق طريقة استدعاء موحدة، وتحتاج هذه الطريقة فقط إلى توفير اسم الإجراء المخزن المراد استدعاؤه، وتوفير قيم معلمات محددة عند الاتصال، بحيث يتم تخزين أي شيء. يمكن استدعاء الإجراء .
الكلمات الرئيسية: الإجراء المخزن، جدول النظام، عرض هيكل المعلومات، رمز تعريف مستند ADO.NET: ② تقرير الإنجاز الفني العملي (التكنولوجيا)، ملخص التعلم النظري والممارسة الاجتماعية (العلوم الاجتماعية)
استدعاء الإجراءات المخزنة بنفس الطريقة في .NET
الملخص: يعد استخدام الإجراءات المخزنة عادة جيدة في تطوير المشاريع، فهو يوفر جدولًا ووظائف ومؤشرات مؤقتة، ويمكن أن يستفيد منها أيضًا تصحيح الأخطاء والترقية والصيانة، ومع ذلك، فإن جميع الاستدعاءات تقريبًا لإجراءات مخزنة هي نفس النمط الفرق بينهما هو معلمات كل إجراء مخزن. إذن، هل يمكننا استدعاء الإجراء المخزن بنفس الطريقة على الرغم من اختلافاتهم وتقليل كود البرمجة؟ لقد فعلنا ذلك بعد دراسة SQL Server و.NET فقط اسم الإجراء المخزن وقيم معلماته، لا تحتاج إلى إنشاء المعلمات بنفسك الكلمة الرئيسية: إجراء Stord، جدول النظام، مخطط المعلومات،
ملخص ADO.NET: أثناء تطوير المشروع، غالبًا ما تستدعي الإجراءات المخزنة. ومع ذلك، تكون جميع استدعاءات الإجراءات المخزنة تقريبًا في نفس النمط، ويكمن الاختلاف الرئيسي في نوع وقيمة كل معلمة تم إنشاؤها. فهل من الممكن استدعاء جميع الإجراءات المخزنة من خلال وظيفة (أو فئة) واحدة؟ تطبق هذه المقالة طريقة استدعاء موحدة تعتمد على مبدأ استخدام جداول النظام التي توفرها قاعدة البيانات، وتحتاج هذه الطريقة فقط إلى توفير اسم الإجراء المخزن المراد استدعاؤه، وتوفير قيم معلمات محددة عند الاتصال، بحيث يمكن لأي شيء يمكن استدعاء الإجراء المخزن.
الملخص: يجب علينا استدعاء الإجراءات المخزنة لأنظمة قواعد البيانات أثناء تطوير المشروع، ومع ذلك، فإن استدعاء الإجراءات المخزنة هو نفسه تقريبًا، والفرق الرئيسي هو الفرق بين نوع المعلمات أو قيمتها وما إلى ذلك. هل يمكننا استدعاء أي إجراءات مخزنة من خلاله؟ دالة (أو فئة)؟ استنادًا إلى جداول النظام التي توفرها أنظمة قواعد البيانات، قمنا بكتابة فئة لاستدعاء أي إجراءات مخزنة في هذه المقالة، ولاستدعاء إجراء مخزن، فإن المعلمات الوحيدة التي تقدمها هي اسم الإجراء المخزن و قيمة جميع معلمات الإجراء المخزن.
<DIV class=text4><B>1. مقدمة</B></DIV>
في تطوير الأنظمة المختلفة، يعد استخدام الإجراءات المخزنة عادة جيدة، فهي لا توفر ميزات مثل الجداول المؤقتة والوظائف والمؤشرات فحسب، بل تسهل أيضًا تصحيح الأخطاء والترقية والصيانة. أثناء عملية التخزين، يمكن معالجة البيانات ثم إعادتها، مما يوفر المزيد من التحليل والتحكم في البيانات. في استدعاءات الإجراءات المخزنة، وجدنا أن استدعاءات الإجراءات المخزنة تكون تقريبًا بالنمط التالي:
1. قم بتعريف SqlConnection
2. قم بتعريف SqlCommand، وقم بتعيين خاصية الاتصال الخاصة به إلى مثيل SqlConnection الذي تم الإعلان عنه للتو، وقم بتعيين CommandName على اسم الإجراء المخزن، وCommandType إلى الإجراء المخزن.
3. أضف كافة المعلمات المطلوبة لاستدعاءات الإجراءات المخزنة إلى مجموعة المعلمات لمثيل SqlCommand الذي تم تعريفه للتو 4. قم باستدعاء الأسلوب ExecuteReader() الخاص بـ SqlCommand للحصول على مجموعة الصفوف التي تم إرجاعها بواسطة الإجراء المخزن.
4. قم بتعريف SqlDataAdapter وDataSet، وقم بتعيين خاصية SelectCommand الخاصة بـ SqlDataAdapter إلى المثيل المعلن في 3، ثم قم باستدعاء أسلوب التعبئة الخاص به لملء الصف الذي تم إرجاعه في DataSet.
5. أغلق كائن SqlConnection
6. قم بتحرير كل مثيل كائن معلن (ملاحظة: 4 يشير إلى طريقتي استخراج البيانات). خلال عملية الاستدعاء هذه، وجدنا أن جميع استدعاءات الإجراءات المخزنة تقريبًا موجودة في هذا الوضع. يكمن الاختلاف في التخزين في الخطوة 2. أسماء العمليات المختلفة تختلف عن المعلمات المستخدمة في كل استدعاء إجراء مخزن في الخطوة 3. ولديها اختلافات في أسماء المعلمات والاتجاهات وأنواع البيانات والأطوال وما إلى ذلك. فهل هناك طريقة لتنفيذ جميع استدعاءات الإجراءات المخزنة؟ أي أنك تحتاج فقط إلى توفير اسم الإجراء المخزن، ثم تمرير قيم المعلمات إلى طريقة الاستدعاء لتحقيق استدعاء الإجراء المخزن، ثم استخدام هياكل بيانات معينة لحفظ مجموعة الصفوف التي تم إرجاعها، وقيم المعلمات الصادرة، و عملية إرجاع القيم. وبعد دراسة جداول نظام SQL Server، وجدنا أن هذه الفكرة قابلة للتنفيذ.
2. جداول النظام وطرق عرض بنية المعلومات
تقوم قواعد البيانات العلائقية، مثل SQL Server، بتخزين بيانات التعريف في قاعدة البيانات بطريقة ما. في SQL Server، تكون هذه هي قاعدة بيانات النظام وجداول النظام. بعد تثبيت SQL Server، سيتم إنشاء أربع قواعد بيانات للنظام تلقائيًا: الرئيسية والنموذج وmsdb وtempdb. قاعدة البيانات الرئيسية هي مستودع كافة المعلومات على مستوى النظام في SQL Server. يتم تسجيل حسابات تسجيل الدخول وإعدادات التكوين وإجراءات النظام المخزنة ووجود قواعد البيانات الأخرى في قاعدة البيانات الرئيسية. تقوم قاعدة بيانات msdb بتخزين معلومات SQL Server Agent. عند تحديد المهام والمشغلين والتنبيهات، يتم تخزينها في msdb. النموذج هو قالب لجميع قواعد البيانات التي أنشأها المستخدم. عند إنشاء قاعدة بيانات جديدة، انسخ النموذج وقم بإنشاء الكائنات المطلوبة. يحفظ tempdb الكائنات المؤقتة في SQL Server. عرض الجداول المؤقتة التي تم إنشاؤها والإجراءات المخزنة المؤقتة بالإضافة إلى الكائنات المؤقتة التي أنشأها النظام كلها تستخدم tempdb. [1] ولكل قاعدة بيانات جداول النظام الخاصة بها. تُستخدم جداول النظام هذه لتخزين معلومات التكوين والكائن. من جداول النظام هذه، يمكننا الحصول على معلومات حول جميع معلمات كل إجراء مخزن. يتم تخزين هذه المعلومات في جدول syscolumns. هناك أسماء المعلمات، والأنواع، والأطوال، والاتجاهات، وما إلى ذلك التي يجب استخدامها في طريقتنا. ومع ذلك، ستتغير الحقول الموجودة في جداول النظام مع إصدار SQL Server. على سبيل المثال، يعد كل من type وxtype في syscolumns مثالاً على هذه التغييرات، حيث يقوم كلاهما بتخزين معلومات النوع. لتكييف طريقتنا مع تغييرات إصدار SQL Server، نحتاج إلى استخدام عرض بنية المعلومات. يعرّف ANSI-92 طرق عرض بنية المعلومات على أنها مجموعة من طرق العرض التي توفر بيانات النظام. من خلال الاستفادة من هذا العرض، يمكنك إخفاء جداول النظام الفعلية من التطبيق الخاص بك. لن تؤثر التغييرات في جداول النظام على التطبيقات، لذا يمكن أن تكون التطبيقات مستقلة عن موردي قواعد البيانات وإصداراتها. [1] يدعم ANSI-92 وSQL Server استخدام بنية تسمية ثلاثية المقاطع للإشارة إلى الكائنات الموجودة على الخادم المحلي. يُطلق على مصطلحات ANSI-92 اسم catalog.schema.object، بينما يطلق عليها SQL Server اسم data.owner.object. [1] على سبيل المثال، إذا أردنا العثور على جميع معلومات المعلمات لجميع الإجراءات المخزنة، فيمكننا استخدام: حدد * من INFORMATION_SCHEMA.PARAMETERS. إذا أردنا العثور على جميع معلومات المعلمات لإجراء مخزن معين، فهو: حدد * من INFORMATION_SCHEMA.PARAMETERS حيث SPECIFIC_NAME ='Proc1 ' من خلال عرض بنية المعلومات، تم حل أكثر من نصف مشكلاتنا. بعد ذلك، سنلقي نظرة على كيفية تنفيذ طريقتنا في .NET.
3. ينصب تركيز طريقة التنفيذ على كيفية الحصول على جميع معلومات المعلمات الخاصة بالإجراء المخزن بناءً على اسمه، ثم إنشاء كل معلمة تلقائيًا بناءً على معلومات المعلمة هذه. من أجل أتمتة هذه الإجراءات، يجب أن تكون عملية الإعلان عن SqlConnection وSqlCommand وSqlParameter وعملية إنشاء كل SqlParameter غير مرئية للمستخدم. الشيء الوحيد الذي يحتاج المستخدم إلى تقديمه هو اسم الإجراء المخزن، ثم يوفر معلمات مختلفة عند الاتصال، وحتى أنواعها لا تحتاج إلى توفيرها.
3.1 الحصول على معلمات الإجراء المخزن وإنشائها تعد كيفية الحصول على معلمات الإجراء المخزن المراد استدعاؤه وإنشاؤها نقطة أساسية يمكننا تنفيذ هذه الخطوة تلقائيًا من خلال عرض بنية المعلومات.
// الحصول على معلمات الإجراء المخزن وإنشائها
public void GetProcedureParameter(params object[] بارامترات)
{ SqlCommand myCommand2 = new SqlCommand(
)
;
= '" + this.ProcedureName + "' ترتيب حسب ORDINAL_POSITION"؛
قارئ SqlDataReader = null؛ Reader = myCommand2.ExecuteReader()؛ // إنشاء معلمة إرجاع
myParameter = new SqlParameter();
myParameter.ParameterName = "@Value";
myParameter SqlDbType = SqlDbType.Int;
myParameter.Direction = ParameterDirection.ReturnValue;
myCommand.Parameters.Add(myParameter);
// إنشاء كل معلمة هنا يمكنك إنشاء نوع SqlParameter والقيمة والاتجاه والسمات الأخرى تلقائيًا
while(reader.Read())
{
myParameter = new SqlParameter();
myParameter.ParameterName = Reader["PARAMETER_NAME"].ToString();
myParameter.Direction = Reader["PARAMETER_MODE"].ToString()=="IN" ?ParameterDirection.Input:ParameterDirection.Output;
Switch(reader["DATA_TYPE"].ToString()) {
case "int" :
if(myParameter.Direction == ParameterDirection.Input)
myParameter.Value = (int)parameters[i] ;
myParameter.SqlDbType
=
SqlDbType.Int
;
3.2 إرجاع مجموعة بيانات النتيجة وقيمة الإرجاع ومجموعة المعلمات الصادرة بعد إنشاء معلمات الإجراء المخزن، يمكننا استدعاء الإجراء المخزن. لأنه في .NET، فإن الفئات شائعة الاستخدام التي ترجع مجموعات النتائج هي SqlDataReader وDataSet، ولا يمكن استخدام SqlDataReader إلا أثناء الحفاظ على الاتصال، ولكن لا يمكن استخدام DataSet. في تطبيقنا، يجب قطع الاتصال بعد المكالمة، لذلك يتم استخدام DataSet لحفظ مجموعة النتائج التي تم إرجاعها.
public SqlResult Call(params object[] بارامترات){ // SqlResult هي فئة محددة ذاتيًا تُستخدم لحفظ مجموعات البيانات الناتجة وقيم الإرجاع ومجموعات المعلمات الصادرة SqlResult result = new SqlResult(); String
myConnection = new SqlConnection(ConnectionString);
myCommand =new
SqlCommand(this.ProcedureName, myConnection);
myCommand.CommandType = CommandType.StoredProcedure
; قم بتخزين معلمات الإجراء وتعيين القيم
GetProcedureParameter(parameters);
myAdapter.Fill(result.dataSet, "Table"); // احصل على قيمة المعلمة الصادرة وزوج الاسم للإجراء المخزن واحفظه في Hashtable GetOutputValue(result) ; // حرر الموارد المختلفة هنا وافصل
myAdapter.Dispose();
myCommand.Dispose()
;
myConnection.Dispose
();
4. مزيد من العمل على الرغم من أن تطبيقنا هنا مخصص لقاعدة بيانات SQL Server، إلا أنه يمكن استخدام هذه الطريقة لأي قاعدة بيانات توفر طرق عرض بنية المعلومات، أو تتوافق مع معيار ANSI-92، أو توفر بيانات التعريف. نقوم بتغليفها في فئة SqlProcedure، ويمكن استدعاء الإجراء المخزن بسهولة عند الحاجة، مما يقلل الكثير من عمل التعليمات البرمجية المتكررة بشكل أساسي. لكي تدعم فئة SqlProcedure المزيد من أنواع البيانات، في طريقة GetProcedureParameter()، تحتاج إلى تحليل النوع والاتجاه والطول والقيمة الافتراضية والمعلومات الأخرى لكل معلمة وفقًا لاحتياجاتك الخاصة، ثم إنشاء هذه المعلمة. يمكن تنفيذ أي نوع بشكل أساسي، حتى أنواع الصور يمكن إنشاؤها بهذه الطريقة. بهذه الطريقة يمكن أن يكون الفصل عامًا جدًا ومفيدًا في أي مشروع.
مراجع
[1] راي رانكينز، بول جنسن، بول بيرتوتشي، الكتاب العملي لـ SQL Server 2000، بكين: مطبعة الصناعة الإلكترونية، 2002
[2] مكتبة MSDN، يناير 2003، شركة مايكروسوفت.
نبذة عن المؤلف: ليو تشيبو (1979-)، ذكر، من شينخوا، هونان، درجة الماجستير، اتجاهات البحث الرئيسية: الشبكة العصبية والتعرف على الأنماط، نظام معلومات التشغيل الآلي للمكاتب.
البريد الإلكتروني: [email protected]