Bir Visual C# bileşeninde COM + işlemleri nasıl kullanılır

Makale çevirileri Makale çevirileri
Makale numarası: 816141 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu adım adım makalede, COM + kullanmayı açıklamaktadır (Bileşen Hizmetleri) Visual C# sınıf hareketler. Bir dizi veritabanı işlemi, bir birim olarak kabul edilir. Işlemlerinin tümü başarılı ya da, bir işlem başarısız olursa, tüm işlem başarısız olur. Ikinci durumda, çalışmış herhangi bir veritabanı işlemi için temel veritabanını nakledilir.

Gereksinimler

Önerilen donanım, yazılım, ağ altyapısı, beceriler ve bilgi ve gereken hizmet paketleri, aşağıdaki öğeler açıklanmaktadır:
  • Microsoft Windows 2000 Server SP1
  • Microsoft ınternet ınformation Services (IIS) 4.0 veya sonraki bir sürümü
  • Microsoft ınternet Explorer sürüm 5.0, 5.5 veya 6.0
Bu makalede aşağıdakileri incelemeniz olduğunuz varsayılmaktadır:
  • Işlem kavramları ve işleme
  • COM + (Bileşen Hizmetleri)

COM + işlem Hizmetleri

Microsoft .NET Framework System.EnterpriseServices'ı ad ile işlem hareket uygulayabilirsiniz. COM + erişimi, işlem Hizmetleri, bir sınıf oluşturmak. Bunu yapmak için şu adımları izleyin:
  1. Visual Studio .NET veya Visual Studio 2005'i başlatın.
  2. Dosya menüsünde Yeni ' nin üzerine gelin ve sonra Project ' i tıklatın.
  3. Project Types altında Visual C# Projects ' ı tıklatın ve Sınıf kitaplığışablonları altında tıklatın. Proje prjEnterprise adı.

    Not Visual Studio 2005, Visual C#Project Types altında tıklatın ve Sınıf kitaplığışablonları altında tıklatın. Proje prjEnterprise adı.
  4. Varsayılan olarak, Class1 oluşturulur.
  5. Solution Explorer'da (Çözüm Gezgini), Başvurular ' ı sağ tıklatın ve sonra Add Reference</a1>'ı tıklatın.
  6. <a0>Başvuru Ekle</a0> iletişim kutusu görüntülenir. Bileşen adı altında .NET</a0> sekmesinde, System.EnterpriseServices'ı çift tıklatın.
  7. Seçili bileşenler altında System.EnterpriseServices'ı olduğundan emin olun. Tamam ' ı tıklatın.
  8. Diğer tablolarda Class1.cs dosyayı önce aşağıdaki kodu ekleyin:
    using System.EnterpriseServices;
    using System.Data.SqlClient;
  9. ClsES Class1.cs dosyasına adlı yeni bir sınıf ekleyin.
  10. COM + işlem hizmetleri kullanmak için <a0></a0>, sınıfınızın (clsES) işlevleri ServicedComponent gibi devralınmalıdır:
    public class clsES : ServicedComponent
  11. Bir Transaction özniteliği sınıfı için işlem desteği düzeyini belirlemenizi aşağıdaki gibi kullanılır:
    [Transaction(TransactionOption.Required)]public class clsES : ServicedComponent
  12. Bir yöntem clsES sınıfında oluşturmak ve dört giriş tamsayı Parametreler alan dbAccess olarak adlandırın. Ilk iki parametre, bu ürün için sipariş bir ürün KIMLIĞI ve birimleri sağlar. Ikinci iki parametre, bu ürün için bir ürün KIMLIĞI ve stok biriminde sağlar. Bu yöntem, bir veritabanı işlemler bir işlem olarak ele alınması için bu belirtilen ürün kimliklerini gerçekleştirir:
    void dbAccess(int pID1,int onOrder, int pID2, int inStock)
  13. DbAccess yönteminde, Northwind için bir <a0>SQL</a0> bağlantı nesnesi oluştur veritabanı ve bağlantıyı açar. Aşağıdaki veritabanı'nı kullanarak veritabanı işlemleri oluşur:

    Not Aşağıdaki bağlantı dizesi parametreleri, SQL Server sunucusu için doğru değerler yansıtacak biçimde değiştirmeyi unutmayın.
    SqlConnection Conn = new SqlConnection("user id=<username>;password=<strong password>;Initial Catalog=northwind;Data Source=2E124\\SQL;");
    				Conn.Open();
    
  14. Veritabanı işleme sırasında oluşabileceği özel durumlar yakalanacak deneyin bloğu ayarlayın. Hareket iptal etmek için bu özel durumları yakalamak gerekir. Deneyin bloğu iki veritabanı işlemleri içerir. Farklı bir alan için belirtilen Ürünler tablosu kaydının. her operasyonun güncelleştirir
     try { 
    
  15. Ürünler tablosuna ilk güncelleştirmeyi uygulayın. Ürün Kimliği, belirtilen ilk iki giriş parametreleri için <a1>onOrder</a1> değeriyle UnitsonOrder alanı güncelleştirin. Bu SQL güncelleştirmeyi çalıştırmak için aşağıdaki SQL komutunu kullanın:
    SqlCommand sqlCommand = new SqlCommand("UPDATE myProducts SET UnitsonOrder = " + onOrder + " WHERE productID = " + pID1, Conn);
    				sqlCommand.ExecuteNonQuery();
  16. Başka bir güncelleştirmenin Ürünler tablosuna gerçekleştirin. UnitsinStock alanıyla güncelleştirme inStock ürün kimliği, üçüncü ve dördüncü giriş parametrelerinde belirtilen değeri. Bu SQL güncelleştirmeyi çalıştırmak için aşağıdaki SQL komutunu kullanın:
    sqlCommand.CommandText = "UPDATE myProducts SET UnitsinStock = " + inStock + " WHERE productID = " + pID2;
    				sqlCommand.ExecuteNonQuery();
    
  17. Bu güncelleştirmeler, bir COM + işlem parçası olduğundan, birim olarak kaydedilmiş kullanılırlar. Hareketi tamamlamak için kullanılan System.EnterpriseServices'ı ad contextUtil</a1> sınıfının setComplete yöntemi (iki bu durumda güncelleştirir) varsa, hata özel durum oluşturuldu:
    ContextUtil.SetComplete();
  18. Northwind veritabanı bağlantısı kapatıldı:
    Conn.Close();
    }
  19. Hareketin tamamı iptal etmek için SQL komutlarını çalıştırırken oluşan özel durumlar catch gerekir:
    catch(Exception e){ 
  20. SetAbort yöntemi System.EnterpriseServices'ı ad contextUtil</a1> sınıfının tüm işlemin iptal etmek için kullanılır. Ilk güncelleştirme başarısız olur ve ikinci güncelleştirme başarısız olursa, her iki güncelleştirmenin Ürünler tablosunda deftere nakledilir. Özel durum yakaladı, işlemin başarısız olduğunu gösteren çağırana atılır:
    ContextUtil.SetAbort();
    				throw e;
    }
  21. Düzgün çalışabilmesi bu bileşeni için bileşen kesin adı olmalıdır. Kesin adı oluşturun ve sonra da derleme kesin adı ile oturum açın. Bunu yapmak için şu adımları izleyin:
    1. Visual Studio. NET'in komut isteminde, bir anahtar oluşturarak sn.exe -k snEnterprise.snk yazın. Imzalama derlemeler kesin adları hakkında daha fazla bilgi için .NET Framework SDK belgelerine bakın.
    2. SnEnterprise.snk proje klasörünüze kopyalayın.
    3. Önce veya sonra diğer derleme özniteliği ifadeleri, AssemblyInfo.vc içinde aşağıdaki kod satırını ekleyin:
      [assembly: AssemblyKeyFileAttribute("..\\..\\snEnterprise.snk")]		
    4. Kaydedin ve sonra da projenizin oluşturun.

Kod dökümü tamamlayın.

Not 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
			{

			}
		}
	}	
}

It Works That doğrulayın.

Bu kod sınamak için <a0></a0>, clsES proje kullanan bir konsol uygulaması oluşturun. Bir durumda, işlem başarılı olur ve onorder ve instock belirtilen ürün için alanları güncelleştirilir. Ikinci durumda, onOrder alan için belirtilen ürün için güncelleştirme, güncelleştirme için ancak başarılı inStock bir ürün, Ürünler tablosunda belirtilen ürün numarası olmadığından başarısız için alan. Bu bir işlem hatası neden olur ve hareket göz ardı edilir.
  1. Visual Studio .NET veya Visual Studio 2005, Dosya menüsünden Yeni'yi tıklatın ve sonra Project.
  2. Project Types altında Visual C# Projects ' ı tıklatın ve şablonları altında Console Application ' ı tıklatın.

    Not Visual Studio 2005, Visual C#Project Types altında tıklatın ve şablonları altında Console Application ' ı tıklatın.
  3. Ad metin kutusuna testES yazın. Solution Ekle) seçeneğinin seçili olduğundan emin olun.
  4. Bu proje için çözüm eklemek için Tamam ' ı tıklatın.
  5. ClsES sınamak için testES, bir başvuru eklemeniz gerekir. Solution Explorer'da (Çözüm Gezgini), başvuru (yani, eklediğiniz) testES altında sağ tıklatın ve Add Reference</a1>'ı tıklatın.
  6. <a0>Başvuru Ekle</a0> iletişim kutusu görüntülenir. Projeler sekmesinde prjEnterprise çift tıklatın.
  7. Başvuru, altında görünür Seçili bileşenleri. Bu başvuruyu projeye eklemek için Tamam ' ı tıklatın.
  8. Projeye bir başvuru System.EnterpriseServices'ı kitaplığa ekleyin. Solution Explorer'da (Çözüm Gezgini), Başvurular ' ı sağ tıklatın ve sonra Add Reference</a1>'ı tıklatın.
  9. <a0>Başvuru Ekle</a0> iletişim kutusu görüntülenir. Bileşen adı altında .NET</a0> sekmesinde, System.EnterpriseServices'ı çift tıklatın.
  10. Seçili bileşenler altında System.EnterpriseServices'ı olduğundan emin olun. Tamam ' ı tıklatın.
  11. Konsol uygulaması) sağ tıklatın (testES) ve sonra da <a2>Başlangıç proje olarak ayarla</a2>'ı tıklatın
  12. Class1 sınıfının ana işlevi aşağıdaki kaynak kodu yapıştırın:
    	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. Sınama kod çalıştırmak için F5 tuşuna basın.

    7. Adımda kodda dbAccess ilk Çağrı başarılı olur. Ürün 1 ve ürün 2 Products tablosunda var. Ürün 1 için'onOrder alan 777'için güncelleştirilir ve inStock ürün 2 888 için güncelleştirilmesi için alan. Bu işlem başarılı oldu, çünkü çıktı penceresinde aşağıdaki iletiyi alırsınız
    HAREKET BİR - BAŞARILI


    Ikinci dbAccess çağrısı başarısız. Bu nedenle, her iki güncelleştirmenin deyiminde dbAccess Ürünler tablosuna veritabanına deftere nakledilir. Ancak Ürün 1, 5 ' e güncelleştirilmiş onOrder alanına sahip olabilir, ürün 2 olamaz, inStock-20 için alanını ayarlayın. Ürün tablo tanımlamasını da tanımlı bir kısıtlama nedeniyle inStock negatif sayılar için izin verilmez.

    Bu nedenle dbAccess çağrısı başarısız olur ve hareketin tamamı başarısız olur. Ürünler tablosunda, dbAccess çağrısı önce olduğu gibi kalır. Catch ekstresi dbAccess hareket hatasından bildirim işleme ve çıktı penceresinde aşağıdaki hata iletisini alırsınız:
    İŞLEM HATASI
  14. SQL Server Enterprise Manager'ı kullanarak Northwind Products tablosunun içeriğini inceleyin. Ürün 1'i görüntülediğinizde onOrder alan için 777 eşittir. Ürün 2, görüntülediğinizde instock 888 bir alandır. Bu nedenle, ikinci (kısaca, bu alanlar için başka değerler de olmuş olabilir) dbAccess çağrısı başarısız.

Sorun Giderme

  • COM + hizmetlerini kullanan herhangi bir proje kesin adı olduğundan emin olun.
  • COM + hizmetlerini kullanan herhangi bir sınıfı bir servis verilen bileşeninden devralınmalıdır. Servis verilen bileşen System.EnterpriseServices'ı ad alanında bulunur.
  • Tamamlanmış veya iptal edildi önce ayıklarken, bir hareket zaman. Zaman aşımını önlemek için <a0></a0>, işlem özniteliği bir zaman aşımı özelliğini kullanın. Aşağıdaki örnekte, 1.200 zaman aşımına uğramadan önce herhangi bir hareket saniye ilişkili yöntemi vardır:
    [Transaction(TransactionOption.Required,timeout=1200)]

Referanslar

Ek bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitelerini ziyaret edin:
COM + ıntegration: Nasıl .NET Enterprise Services Build yardımcı olabilir uygulamalar Dağıtılmış
http://msdn.microsoft.com/msdnmag/issues/01/10/complus/default.aspx
Servis verilen bileşenleri
http://msdn2.microsoft.com/en-us/library/Aa289839(VS.71).aspx

Özellikler

Makale numarası: 816141 - Last Review: 22 Kasım 2007 Perşembe - Gözden geçirme: 4.3
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Anahtar Kelimeler: 
kbmt kbcomplusobj kbsqlprog kbsqlclient kbdatabase kbhowtomaster KB816141 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:816141

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com