كيفية استخدام المعاملات COM + في مكون Visual Basic .NET

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية315707
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
للحصول على إصدار Microsoft Visual Basic 6.0 من هذه المقالة، راجع 261096.

في هذه المهمة

الموجز
تعرض هذه المقالة خطوة بخطوة كيفية استخدام + COM (مكون خدمات) المعاملات في فئة Visual Basic .NET. تعتبر مجموعة من عمليات قاعدة البيانات كوحدة واحدة. العمليات إما كافة نجاح أو فشل معاملة بالكامل في حالة فشل عملية واحدة. في الحالة الثانية، لا يتم نشر أية عمليات قاعدة البيانات التي تمت محاولتها إلى قاعدة البيانات الأساسية.

back to the top

متطلبات

العناصر التالية تصف الأجهزة الموصى بها و برنامج ، البنية الأساسية للشبكة ، المهارات و معرفة و حزم الخدمة:
  • نظام التشغيل Microsoft Windows 2000 Server تشغيل SP-1
  • Microsoft خدمات معلومات إنترنت (IIS) الإصدار 4.0 أو الأحدث
  • الإصدار 5.0 أو 5.5 أو 6.0 من Microsoft Internet Explorer
معرفة السابقة المطلوبة:
  • معرفة المفاهيم المعاملات ومعالجة
  • بأزرار بـ COM + (خدمات المكونات)
back to the top

COM + خدمات المعاملات

توفير مساحة الاسم System.EnterpriseServices داخل Microsoft .NET framework الوظيفة لتنفيذ معالجة العمليات. للحصول على حق الوصول إلى COM + خدمات المعاملات بإنشاء فئة باتباع الخطوات التالية:
  1. افتح Visual Studio .NET.
  2. إنشاء مشروع مكتبة فئة جديدة باسم prjEnterprise في Visual Basic .NET. ينشئ Visual Basic .NET فئة عام المسمى Class1.
  3. إضافة مرجع إلى المشروع إلى مكتبة System.EnterpriseServices. في إطار "المستكشف" الحل "، انقر بزر الماوس الأيمن فوق المجلد مراجع ثم حدد إضافة مرجع من القائمة المختصرة. ضمن علامة التبويب .NET ، قم بالتمرير حتى تقوم بتحديد موقع System.EnterpriseServices. انقر نقراً مزدوجاً فوق System.EnterpriseServices تأكد من ظهور System.EnterpriseServices في إطار "المكونات المحددة" ثم انقر فوق موافق.
  4. استخدم عبارة عمليات الاستيراد مساحة الاسم System.EntpriseServices ومساحة System.Data.SqlClient بحيث لا يجب تأهيل أية مراجع إلى مساحات أسماء هذه فيما بعد في التعليمات البرمجية بشكل كامل. يجب أن تبدو هذه العبارات قبل أية عبارات أخرى في ملف الفئة:
    	Imports System.EnterpriseServicesImports System.Data.SqlClient
  5. لاستخدام "خدمات" COM + معاملات فئة مسماة clsES ، يجب أن ترث وظيفة ServicedComponent:
    	Public Class clsESInherits ServicedComponent
  6. يتم استخدام سمة المعاملات لتحديد مستوى دعم المعاملات للفئة:
    <Transaction(TransactionOption.Required)> Public Class clsES   	Inherits ServicedComponent
  7. إنشاء أسلوب داخل clsES تسمى dbAccess تتلقى أربعة معلمات إدخال عدد صحيح. توفر المعلمات الأولين معرف منتج "و" الوحدات الطلب لهذا المنتج. توفر الثاني المعلمتين معرف منتج "و" الوحدات الموجودة بالمخزن لهذا المنتج. هذا الأسلوب بتنفيذ مجموعة من عمليات قاعدة البيانات ضد معرفات المنتج المحدد هذه التي تتم معاملته على أنه معاملة:
    	Public Sub dbAccess (ByVal pid1 As Integer, _ByVal onOrder As Integer, _      ByVal pid2 As Integer, ByVal inStock As Integer)
  8. في أسلوب dbAccess إنشاء كائن اتصال SQL Northwind قاعدة البيانات ثم قم بفتح الاتصال. عمليات قاعدة تحدث باستخدام قاعدة البيانات هذه:
    Dim Conn As New _  SqlConnection("uid=sa;database=northwind;server=localhost")Conn.Open()
  9. تعيين كتلة حاول التقاط أي معالجة قاعدة البيانات التي قد تحدث. يجب أن يكون اكتشاف هذه الأخطاء حتى تتمكن من إحباط المعاملة. تتضمن كتلة جرّب عمليات قاعدة جهازي ، كل منها تحديث حقل مختلف في سجل جدول منتجات محدد.
    		Try
  10. تنفيذ التحديث الأول إلى جدول المنتجات. قم بتحديث الحقل UnitsonOrder بقيمة onOrder المنتج مع معرف ، كما هو محدد في معلمات الإدخال الأولين. يتم استخدام SQLcommand لتشغيل هذا التحديث SQL:
    	   Dim Cmd As SqlCommand      Dim sqlString As String = _           "update products set UnitsonOrder = " & onOrder _           & " where productId = " & pid1               Cmd = New SqlCommand(sqlString, Conn)      Cmd.ExecuteNonQuery()
  11. إجراء تحديث آخر إلى جدول المنتجات. تحديث الحقل UnitsinStock قيمة inStock المنتج مع معرف ، كما هو محدد في معلمات الإدخال الثالث والرابع. يتم استخدام SQLCommand لتشغيل هذا التحديث SQL:
          sqlString = _"update products set UnitsinStock = " _& inStock & " where productId = " & pid2                 Cmd.CommandText = sqlString      Cmd.ExecuteNonQuery()
  12. لأن هذه التحديثات جزء من معاملة COM + ، وهي تنفيذها كوحدة. استخدام الأسلوب setComplete الفئة contextUtil من مساحة الاسم System.EnterpriseServices تنفيذ المعاملة-في هذه الحالة التحديثات نوعين--في حالة عدم وجود أخطاء تم طرح:
          ContextUtil.SetComplete()
  13. إغلاق الاتصال بقاعدة بيانات Northwind:
          Conn.Close()
  14. أية أخطاء تحدث أثناء تشغيل أوامر SQL يجب أن يدخل في ذلك ، بحيث يتم إحباط المعاملة بالكامل:
    	   Catch e As Exception
  15. يتم استخدام أسلوب setAbort فئة contextUtil من مساحة الاسم System.EnterpriseServices إحباط المعاملة بالكامل. إذا كان التحديث الأول الناجح فشل التحديث الثاني هو نشر أي منهما التحديث إلى جدول المنتجات. تم طرح استثناء caught للمتصل تشير إلى فشل المعاملة:
          	ContextUtil.SetAbort()			Throw e		End Try
  16. ترتيب لهذا المكون بصورة يجب أن يكون المكون على اسم واضح. اتبع الخطوات التالية لإنشاء اسم واضح و تسجيل التجميع مع الاسم المميز:

    1. لفتح موجه أوامر Visual Studio .NET انقر فوق ابدأ ، ثم انقر فوق البرامج ، انقر فوق Microsoft Visual Studio .NET ثم انقر فوق أدوات .NET Visual Studio.
    2. في موجه الأوامر، اكتب snEnterprise.snk إلى كيلو sn.exe لإعطاء الخاص بك التجميع على اسم واضح.

      لمزيد من المعلومات حول توقيع التجميعات ذات أسماء قوية راجع وثائق .NET Framework SDK.
    3. نسخ snEnterprise.snk إلى مجلد المشروع.
    4. في AssemblyInfo.vb, أضف السطر التالي من التعليمات البرمجية قبل أو بعد الأخرى عبارات سمة التجميع:
      <Assembly: AssemblyKeyFileAttribute("..\..\snEnterprise.snk")>
    5. قم بحفظ ثم إنشاء المشروع.
back to the top

إتمام سرد التعليمات البرمجية

Imports System.Data.SqlClientImports System.EnterpriseServices<Transaction(TransactionOption.Required)> Public Class ClsES    Inherits ServicedComponentPublic Sub dbAccess(ByVal pid1 As Integer, ByVal onOrder As Integer, _      ByVal pid2 As Integer, ByVal inStock As Integer)        Dim Conn As New _          SqlConnection("uid=sa;database=northwind;server=localhost")          Conn.Open()        Try          Dim Cmd As SqlCommand          Dim sqlString As String = _             "update products set UnitsonOrder = " & _              onOrder & " where productId = " & pid1          Cmd = New SqlCommand(sqlString, Conn)          Cmd.ExecuteNonQuery()          sqlString = _         " update products set UnitsinStock = " & inStock & _                " where productId = " & pid2           Cmd.CommandText = sqlString           Cmd.ExecuteNonQuery()           ContextUtil.SetComplete()           Conn.Close()                 Catch e As Exception            ContextUtil.SetAbort()		  Throw e        End Try    End Sub End Class
back to the top

تحقق من أنه يعمل

لاختبار هذه التعليمة البرمجية إنشاء تطبيق وحدة تحكم يستخدم clsES. في حالة واحدة معاملة نجاح و onorder و instock يتم تحديث الحقول للمنتج المحدد. نجاح في الحالة الثانية تحديث حقل onOrder منتج محدد ولكن التحديث الخاص inStock الحقل عن فشل منتج لأن رقم المنتج المحدد غير موجود في الجدول "منتجات". ينتج عن هذا فشلاً معاملة مع معاملة يتم تجاهل.
  1. إضافة تطبيق وحدة تحكم جديد يسمى testES إلى الحل الخاص بك بحيث يحتوي الحل على المشروع testES ومشروع prjEnterprise. لإضافة مشروع جديد انقر فوق "جديد" في قائمة "ملف" ومن ثم حدد Project.
  2. يظهر مربع حوار مشروع جديد. حدد المجلد Visual Basic في المشروع جزء أنواع ومن ثم حدد وحدة التحكم التطبيقات من القوالب. في المربع الاسم أسفل جزء القوالب اكتب testES والذي هو اسم المشروع. تأكد من تحديد الزر إضافة إلى الحل الذي يظهر في أسفل مربع الحوار. انقر فوق موافق لإضافة هذا المشروع إلى الحل.
  3. لكي testES لاختبار clsES يجب إضافة مرجع. في إطار حلول انقر بزر الماوس الأيمن فوق المجلد مراجع موجود تحت testES المشروع الذي قمت بإضافته. حدد إضافة مرجع. يظهر مربع حوار إضافة مرجع.
  4. حدد علامة التبويب مشاريع ومن ثم انقر نقراً مزدوجاً فوق prjEnterprise. يجب أن يظهر مرجع في المكونات المحددة في الجزء السفلي من مربع الحوار. انقر فوق موافق لإضافة هذا المرجع إلى هذا المشروع.
  5. انقر بزر الماوس الأيمن فوق وحدة التحكم التطبيق، testES وحدد ثم تعيين مثل بدء تشغيل Project.
  6. من القائمة تصحيح حدد Windows. في القائمة الفرعية حدد فوري. هذا يضمن مرئياً الإطار الحالي.
  7. نسخ التعليمات اختبار البرمجية التالية في "الوحدة النمطية الوحدة النمطية 1" استبدال عبارتي الرئيسي Sub و End Sub. يجب أن تظهر الوحدة النمطية كما يلي:
        Sub Main()        Dim myTest As New prjEnterprise.clsES()        Try            myTest.dbAccess(1, 777, 2, 888)            Debug.WriteLine("TRANSACTION ONE -- SUCCESS")                       myTest.dbAccess(1, 5, 2, -20)            Debug.WriteLine("TRANSACTION TWO -- SUCCESS")                Catch            Debug.WriteLine("TRANSACTION FAILURE")        End Try    End Sub
  8. اضغط F5 لتشغيل التعليمات البرمجية الاختبار.
  9. نجاح الاستدعاء الأول إلى dbAccess في التعليمات البرمجية في الخطوة 7. منتج 1 "و" منتج 2 في الجدول "منتجات". يتم تحديث الحقل onOrder المنتج 1 777 ، و inStock الحقل للحصول على تحديث المنتج 2 إلى 888. لأن نجاح هذه المعاملة يجب عرض الإطار الحالي رسالة "المعاملة ONE - نجاح".

    فشل استدعاء آخر إلى dbAccess. لذلك، لا أحد من عبارات التحديث ضمن dbAccess إلى المنتجات تم نشر الجدول إلى قاعدة البيانات. على الرغم من أن يكون المنتج 1 حقل onOrder الخاص بها تحديث إلى 5, لا يمكن أن يكون المنتج 2 الخاص به inStock تعيين الحقل إلى-20. وبسبب قيد تعريف داخل تعريف الجدول المنتج inStock غير مسموح أن يكون لديك أرقام سالبة.

    وبالتالي، هذا الاستدعاء إلى dbAccess فشل ، مما يؤدي إلى فشل العملية بالكامل. جدول المنتجات يبقى كما كان قبل استدعاء dbAccess. يعالج عبارة التقاط لإعلام فشل معاملة من dbAccess الناتجة في رسالة "المعاملة FAILURE" الذي تم عرضه في الإطار الحالي.
فحص محتويات الجدول "منتجات Northwind" باستخدام إدارة المؤسسة SQL Server. عند عرض المنتج 1 حقل onOrder تساوي 777; المنتج 2، instock الحقل هو 888. وبالتالي، فشل استدعاء الثاني إلى dbAccess قد يكون تسبب في قيم مختلفة هذه الحقول.

back to the top

استكشاف الأخطاء وإصلاحها

  • تأكد من وجود أي مشروع يستخدم خدمات COM + على اسم واضح.
  • يجب أن ترث أية فئة يستخدم خدمات + COM من مكون serviced العثور في مساحة الاسم System.EnterpriseServices عليه.
  • أثناء تصحيح ، قد مهلة معاملة قبل أن يتم الالتزام بها أو تم إحباط. لتجنب مهلة استخدام خاصية مهلة على سمة المعاملة. في التالية، أسلوب المقترنة يحصل ثانية 1,200 لإكمال أي المعاملات قبل انقضاء المهلة:
    <Transaction(TransactionOption.Required, timeout:=1200) >
back to the top
مراجع
للحصول على مزيد من المعلومات، قم بزيارة مواقع الويب Network (MSDN) المطور Microsoft التالية:
COM + تكامل: كيفية إمكانية تعليمات الخدمات .NET Enterprise يمكنك إنشاء الموزعة تطبيقات
http://msdn.microsoft.com/msdnmag/issues/01/10/complus/

مكونات serviced
http://msdn.microsoft.com/en-us/library/aa289839.aspx
back to the top

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 315707 - آخر مراجعة: 12/07/2015 08:36:17 - المراجعة: 3.2

Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbnosurvey kbarchive kbmt kbhowtomaster KB315707 KbMtar
تعليقات