أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

كيفية استخدام المعاملات COM + في مكون Visual C#

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

اضغط هنا لرابط المقالة باللغة الانجليزية816141
للحصول على إصدار Microsoft Visual Basic .NET من هذه المقالة، راجع 315707.

في هذه المهمة

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

back to the top

متطلبات

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

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

يمكنك تنفيذ المعاملة معالجة بمساحة System.EnterpriseServices في Microsoft .NET Framework. الوصول إلى COM + إنشاء خدمات المعاملات فئة. للقيام بذلك، اتبع الخطوات التالية:
  1. بدء تشغيل Visual Studio .NET أو Visual Studio 2005.
  2. من القائمة ملف، أشر إلى جديد ثم انقر فوق المشروع.
  3. انقر فوق Visual C# مشاريع ضمن أنواع Project ثم انقر فوق مكتبة الفئات ضمن قوالب. اسم المشروع prjEnterprise.

    ملاحظة في Visual Studio 2005 ، انقر فوق Visual C# ضمن أنواع Project ثم انقر فوق مكتبة الفئات ضمن قوالب. اسم المشروع prjEnterprise.
  4. افتراضياً، يتم إنشاء Class1.
  5. في "مستكشف الحلول" انقر بزر الماوس الأيمن فوق مراجع ومن ثم انقر فوق إضافة مرجع.
  6. يظهر مربع الحوار إضافة المرجع. تحت اسم المكون على علامة التبويب .NET انقر نقراً مزدوجاً فوق System.EnterpriseServices.
  7. تأكد من ظهور System.EnterpriseServices ضمن المكونات المحددة. انقر فوق موافق.
  8. قم بإضافة التعليمة البرمجية التالية قبل أية عبارات أخرى في ملف Class1.cs:
    using System.EnterpriseServices;using System.Data.SqlClient;
  9. إضافة فئة جديدة تسمى clsES إلى ملف Class1.cs.
  10. لاستخدام "خدمات" COM + معاملات الفصل الدراسي (clsES) يجب أن ترث وظيفة ServicedComponent كما يلي:
    public class clsES : ServicedComponent
  11. يتم استخدام سمة المعاملات لتحديد مستوى دعم المعاملات للفئة كما يلي:
    [Transaction(TransactionOption.Required)]public class clsES : ServicedComponent
  12. إنشاء أسلوب في فئة clsES ثم اسم dbAccess تتلقى أربعة معلمات إدخال عدد صحيح. توفر المعلمات الأولين معرف منتج ووحدات الطلب لهذا المنتج. توفير الثاني المعلمتين معرف منتج الوحدات الموجودة بالمخزن لهذا المنتج. هذا الأسلوب بتنفيذ مجموعة من عمليات قاعدة البيانات ضد معرفات المنتج المحدد هذه التي تتم معاملته على أنه معاملة:
    void dbAccess(int pID1,int onOrder, int pID2, int inStock)
  13. في أسلوب dbAccess إنشاء كائن اتصال SQL Northwind قاعدة البيانات ثم قم بفتح الاتصال. تحدث عمليات قاعدة البيانات باستخدام قاعدة البيانات التالية:

    ملاحظة تذكر أن تغيير معلمات سلسلة الاتصال التالية لعكس القيم الصحيحة لملقم SQL Server.
    SqlConnection Conn = new SqlConnection("user id=<username>;password=<strong password>;Initial Catalog=northwind;Data Source=2E124\\SQL;");				Conn.Open();
  14. تعيين كتلة حاول التقاط أي الاستثناءات التي قد تحدث أثناء معالجة قاعدة البيانات. يجب أن تمنع هذه الاستثناءات لإحباط العملية. يتضمن كتلة محاولة اثنين من عمليات قاعدة البيانات. كل عملية تحديث حقل مختلف في المنتجات المحدد جدول سجل.
     try { 
  15. تنفيذ التحديث الأول إلى جدول المنتجات. قم بتحديث الحقل UnitsonOrder بقيمة onOrder المنتج مع معرف ، كما هو محدد في معلمات الإدخال الأولين. استخدام أمر SQL التالي لتشغيل هذا التحديث SQL:
    SqlCommand sqlCommand = new SqlCommand("UPDATE myProducts SET UnitsonOrder = " + onOrder + " WHERE productID = " + pID1, Conn);				sqlCommand.ExecuteNonQuery();
  16. إجراء تحديث آخر إلى جدول المنتجات. تحديث الحقل UnitsinStock مع inStock قيمة المنتج مع معرف ، كما هو محدد في معلمات الإدخال الثالث والرابع. استخدام أمر SQL التالي لتشغيل هذا التحديث SQL:
    sqlCommand.CommandText = "UPDATE myProducts SET UnitsinStock = " + inStock + " WHERE productID = " + pID2;				sqlCommand.ExecuteNonQuery();
  17. لأن هذه التحديثات جزء من معاملة COM + ، وهي تنفيذها كوحدة. يتم استخدام أسلوب setComplete فئة contextUtil من مساحة الاسم System.EnterpriseServices الالتزام المعاملة (في هذه الحالة اثنين بتحديث) في حالة عدم وجود أخطاء تم طرح:
    ContextUtil.SetComplete();
  18. إغلاق الاتصال بقاعدة بيانات Northwind:
    Conn.Close();}
  19. يجب أن التقاط أي استثناءات التي تحدث أثناء تشغيل أوامر SQL بحيث يمكن إحباط المعاملة بالكامل:
    catch(Exception e){ 
  20. يتم استخدام أسلوب setAbort فئة contextUtil من مساحة الاسم System.EnterpriseServices إحباط المعاملة بالكامل. إذا كان التحديث الأول الناجح فشل التحديث الثاني هو نشر أي منهما التحديث إلى جدول المنتجات. تم طرح استثناء caught للمتصل تشير إلى فشل المعاملة:
    ContextUtil.SetAbort();				throw e;}
  21. لهذا المكون بصورة يجب أن يكون المكون على اسم واضح. إنشاء اسم قوي ثم قم بتسجيل التجميع مع الاسم المميز. للقيام بذلك، اتبع الخطوات التالية:
    1. في موجه الأوامر الخاص بـ "Visual Studio .NET" ، اكتب snEnterprise.snk إلى كيلو sn.exe لإنشاء ملف مفتاح. لمزيد من المعلومات حول توقيع التجميعات ذات أسماء قوية راجع وثائق .NET Framework SDK.
    2. نسخ snEnterprise.snk إلى مجلد المشروع.
    3. في AssemblyInfo.vc, أضف السطر التالي من التعليمات البرمجية قبل أو بعد آخر عبارات سمة التجميع:
      [assembly: AssemblyKeyFileAttribute("..\\..\\snEnterprise.snk")]		
    4. حفظ كما ثم إنشاء المشروع.
back to the top

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

ملاحظة Remember to change the following connection string parameters to reflect the correct values for your SQL Server server.
using System;using System.Data;using System.Data.SqlTypes;using System.Data.Common;using System.EnterpriseServices;using System.Data.SqlClient;namespace prjEnterprise{		[Transaction(TransactionOption.Required)]public class clsES:ServicedComponent	{		public SqlConnection Conn;		public void dbAccess(int pID1, int onOrder, int pID2, int inStock)		{			try			{							SqlConnection Conn = new SqlConnection("user id=<username>;password=<strong password>;Initial Catalog=northwind;Data Source=2E124\\SQL;");				Conn.Open();				SqlCommand sqlCommand = new SqlCommand("UPDATE myProducts SET UnitsonOrder = " + onOrder + " WHERE productID = " + pID1, Conn);				sqlCommand.ExecuteNonQuery();								sqlCommand.CommandText = "UPDATE myProducts SET UnitsinStock = " + inStock + " WHERE productID = " + pID2;				sqlCommand.ExecuteNonQuery();				ContextUtil.SetComplete();				Conn.Close();			}			catch(Exception e)			{				ContextUtil.SetAbort();							throw e;			}			finally			{			}		}	}	}

back to the top

تحقق من التي من عمل

لاختبار هذه التعليمة البرمجية إنشاء تطبيق وحدة تحكم يستخدم المشروع clsES. في حالة واحدة معاملة نجاح و onorder و instock يتم تحديث الحقول للمنتج المحدد. نجاح في الحالة الثانية تحديث حقل onOrder منتج محدد ولكن التحديث الخاص inStock الحقل لـ يفشل منتج لأن رقم المنتج المحدد غير موجود في الجدول "منتجات". وينتج عن فشل معاملة وسيتم تجاهل المعاملة.
  1. في Visual Studio .NET أو Visual Studio 2005 أشر إلى جديد من القائمة ملف ثم انقر فوق المشروع.
  2. انقر فوق Visual C# مشاريع ضمن أنواع Project ثم انقر فوق تطبيق وحدة التحكم ضمن قوالب.

    ملاحظة في Visual Studio 2005 ، انقر فوق Visual C# ضمن أنواع Project ثم انقر فوق تطبيق وحدة التحكم ضمن قوالب.
  3. في مربع النص الاسم ، اكتب testES. تأكد من تحديد الخيار إضافة إلى الحل.
  4. انقر فوق موافق لإضافة هذا المشروع إلى الحل.
  5. testES لاختبار clsES يجب أن تقوم بإضافة مرجع. في "مستكشف الحلول" انقر بزر الماوس الأيمن فوق "المراجع" ضمن testES (الذي قمت للتو بإضافته) ومن ثم انقر فوق إضافة مرجع.
  6. يظهر مربع الحوار إضافة المرجع. على علامة التبويب "المشاريع" ، انقر نقراً مزدوجاً فوق prjEnterprise.
  7. يظهر مرجع تحت المحددة مكونات. انقر فوق موافق لإضافة هذا المرجع إلى المشروع.
  8. إضافة مرجع إلى المشروع إلى مكتبة System.EnterpriseServices. في "مستكشف الحلول" انقر بزر الماوس الأيمن فوق مراجع ومن ثم انقر فوق إضافة مرجع.
  9. يظهر مربع الحوار إضافة المرجع. تحت اسم المكون على علامة التبويب .NET انقر نقراً مزدوجاً فوق System.EnterpriseServices.
  10. تأكد من ظهور System.EnterpriseServices ضمن المكونات المحددة. انقر فوق موافق.
  11. انقر بزر الماوس الأيمن فوق التطبيق وحدة التحكم (testES) ، ثم انقر فوق تعيين كـ Project بدء التشغيل
  12. قم بلصق التعليمة البرمجية المصدر التالية في دالة الرئيسي الفئة Class1:
    	prjEnterprise.clsES myTest = new prjEnterprise.clsES();				try 				{					myTest.dbAccess(1, 777, 2, 888);					Console.WriteLine("TRANSACTION ONE -- SUCCESS");					myTest.dbAccess(1, 5, 2, -20);					Console.WriteLine("TRANSACTION TWO -- SUCCESS");				}				catch (Exception e)				{					Console.WriteLine("TRANSACTION FAILURE");				}
  13. اضغط F5 لتشغيل التعليمات البرمجية الاختبار.

    نجاح الاستدعاء الأول إلى dbAccess في التعليمات البرمجية في الخطوة 7. المنتج 1 و 2 المنتج في الجدول "منتجات". يتم تحديث الحقل onOrder لـ 1 المنتج 777 ، و inStock الحقل للحصول على تحديث المنتج 2 إلى 888. لأن نجاح هذه المعاملة تتلقى الرسالة التالية في إطار الإخراج
    نجاح واحد- المعاملة


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

    لذلك، يفشل استدعاء هذا dbAccess و فشل المعاملة بالكامل. يبقى الجدول "منتجات" كما كان قبل استدعاء dbAccess. يعالج عبارة التقاط لإعلام فشل معاملة من dbAccess ثم تتلقى رسالة الخطأ التالية في إطار الإخراج:
    فشل في المعاملة
  14. فحص محتويات الجدول "منتجات Northwind" باستخدام إدارة المؤسسة SQL Server. عند عرض المنتج 1 حقل onOrder مساوية 777. عند عرض 2 المنتج instock الحقل هو 888. لذلك، يفشل استدعاء آخر إلى dbAccess (الذي يكون نتج عن قيم هذه الحقول مختلفة).
back to the top

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

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

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

خصائص

رقم الموضوع: 816141 - آخر مراجعة: 11/22/2007 08:17:35 - المراجعة: 4.3

Microsoft Visual C# 2005 Express Edition, Microsoft Visual C# .NET 2003 Standard Edition, Microsoft Visual C# .NET 2002 Standard Edition

  • kbmt kbcomplusobj kbsqlprog kbsqlclient kbdatabase kbhowtomaster KB816141 KbMtar
تعليقات
tml> © 2016 Microsoft
y: none; " src="https://c1.microsoft.com/c.gif?DI=4050&did=1&t=">