Bir Visual Basic .NET bileşeninde COM + işlemleri nasıl kullanılır

Makale çevirileri Makale çevirileri
Makale numarası: 315707 - 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 + nasıl kullanıldığını gösterir (Bileşen Hizmetleri) bir Visual Basic .NET sınıf hareketler. Bir dizi veritabanı işlemi bir birim olarak kabul edilir. Operasyonlar tüm başarılı veya, bir işlem başarısız olursa, tüm işlem başarısız olur. Ikinci durumda, veritabanı işlemleri denendi, alttaki veritabanına nakledilir.

Gereksinimler

Aşağıdaki öğeler, önerilen donanım, yazılım, ağ altyapısı, beceriler ve bilgi ve hizmet paketlerini açıklamaktadır:
  • SP-1'i çalıştıran Microsoft Windows 2000 Server
  • 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
Önceki bilgi gerekli:
  • Işlem kavramları ve işleme
  • COM + (Bileşen Hizmetleri) ile benzerlik

COM + işlem Hizmetleri

Microsoft .NET framework içinde System.EnterpriseServices'ı ad işlem uygulamak için bu işlevi sağlar. Erişim kazanmak için COM + işlem Hizmetleri, bir sınıf aşağıdaki adımları izleyerek oluşturun:
  1. Visual Studio. NET'i açın.
  2. Visual Basic. NET'te prjEnterprise adlı yeni bir sınıf kitaplığı projesi oluşturun. Visual Basic .NET Class1 adlı bir genel sınıf oluşturur.
  3. Projeye bir başvuru System.EnterpriseServices'ı kitaplığa ekleyin. Solution Explorer (Çözüm Gezgini) penceresinde, References klasörünü sağ tıklatın ve sonra kısayol menüsünden Add Reference ' ni seçin. .NET</a0> sekmesinde, System.EnterpriseServices'ı bulmak kadar kaydırın. System.EnterpriseServices'ı çift tıklatın, seçili bileşenleri penceresinde System.EnterpriseServices'ı göründüğünden emin olun ve sonra Tamam ' ı tıklatın.
  4. ımports</a0> deyimini, System.EntpriseServices ad ve System.Data.SqlClient ad alanı için kullanabilir, böylece herhangi bir ba?vuru kodunuzda daha sonra bu ad tam olarak nitelemek sahip olmaz. Bu ifade, diğer tablolarda, sınıf dosyası için önce görünmelidir:
    	Imports System.EnterpriseServices
    Imports System.Data.SqlClient
  5. COM + işlem Hizmetleri'ni kullanmak için clsES adlı sınıfınızın ServicedComponent işlevselliği devralınmalıdır:
    	Public Class clsES
    Inherits ServicedComponent
  6. Işlem bir öznitelik sınıfı için işlem desteği düzeyini belirlemek için kullanılır:
    <Transaction(TransactionOption.Required)> Public Class clsES
       	Inherits ServicedComponent
  7. Yöntem dört giriş tamsayı Parametreler alan dbAccess adlı clsES içinde oluşturun. Ilk iki parametre, bu ürün için sipariş bir ürün KIMLIĞI ve birimlerini 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:
    	Public Sub dbAccess (ByVal pid1 As Integer, _
    ByVal onOrder As Integer, _
          ByVal pid2 As Integer, ByVal inStock As Integer)
  8. DbAccess yönteminde, Northwind için bir <a0>SQL</a0> bağlantı nesnesi oluştur veritabanı ve bağlantıyı açar. Veritabanı işlemi bu veritabanı'nı kullanarak gerçekleşir:
    Dim Conn As New _
      SqlConnection("uid=sa;database=northwind;server=localhost")
    Conn.Open()
  9. Try bloğu oluşabilecek herhangi bir veritabanı işleme yakalamak üzere ayarlayın. Bu hatalar, hareketi iptal yapabilmek için yakalandı gerekir. Try bloğuna iki veritabanı işlemleri, her biri, belirtilen Ürünler tablosundaki kayıt başka bir alana güncelleştirme içerir.
    		Try
  10. Ürünler tablosuna ilk güncelleştirmeyi uygulayın. Ürün Kimliği, ilk iki giriş parametrelerinde belirtilen onOrder değeriyle UnitsonOrder alanı güncelleştirin. Bu güncelleştirmenin SQL çalıştırmak için kullanılan BIR SQLcommand:
    	   Dim Cmd As SqlCommand
          Dim sqlString As String = _
               "update products set UnitsonOrder = " & onOrder _
               & " where productId = " & pid1         
          Cmd = New SqlCommand(sqlString, Conn)
          Cmd.ExecuteNonQuery()
  11. Başka bir güncelleştirmenin Ürünler tablosuna gerçekleştirin. Ürün Kimliği, belirtilen şekilde, üçüncü ve dördüncü Giriş parametreleri için inStock değeri ile UnitsinStock alanı güncelleştirin. Bu güncelleştirmenin SQL çalıştırmak için kullanılan BIR SQLCommand:
          sqlString = _
    "update products set UnitsinStock = " _
    & inStock & " where productId = " & pid2
               
          Cmd.CommandText = sqlString
          Cmd.ExecuteNonQuery()
  12. Bu güncelleştirmeler, bir COM + işlem parçası olduğundan, birim olarak kaydedilmiş kullanılırlar. Hata durum System.EnterpriseServices'ı ad <a1>contextUtil</a1> sınıfının setComplete yöntemini hareketi tamamlamak--bu iki güncelleştirme--durumda kullanılır:
          ContextUtil.SetComplete()
  13. Northwind veritabanı bağlantısı kapatıldı:
          Conn.Close()
  14. Böylece, tüm işlemin iptal SQL komutlarını çalıştırırken oluşan hataları, yakalanan gerekir:
    	   Catch e As Exception
  15. 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
    		End Try
  16. Düzgün çalışabilmesi, bu bileşen için bileşenin güçlü bir adı olması gerekir. Kesin adı oluşturmak ve derleme kesin adla oturum açmak için şu adımları izleyin:

    1. Visual Studio. NET'in komut istemini açmak için <a0></a0>, Başlat ' ı tıklatın, Programlar ' ı tıklatın, Visual Studio.NET ' i tıklatın ve sonra Visual Studio .NET Araçlar ' ı tıklatın.
    2. Komut isteminde, derleme kesin adı vermek sn.exe -k snEnterprise.snk yazın.

      Imzalama derlemeler kesin adları hakkında daha fazla bilgi için .NET Framework SDK belgelerine bakın.
    3. SnEnterprise.snk proje klasörüne kopyalayın.
    4. Önce veya sonra diğer derleme özniteliği ifadeleri, AssemblyInfo.vb içinde aşağıdaki kod satırını ekleyin:
      <Assembly: AssemblyKeyFileAttribute("..\..\snEnterprise.snk")>
    5. Kaydetmek ve projenize yapı.

Tam kod listesi

Imports System.Data.SqlClient
Imports System.EnterpriseServices

<Transaction(TransactionOption.Required)> Public Class ClsES
    Inherits ServicedComponent

Public 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

Çalıştığından emin olun.

Bu kod sınamak için <a0></a0>, clsES 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 ürün başarısız olduğu için belirtilen ürün numarasını Products tablosundaki mevcut olduğundan alan. Bu işlem hatası sayılır hareketiyle sonuçlanır.
  1. Çözüm testES proje hem prjEnterprise projeyi içeren, çözümünüz için testES adlı yeni bir konsol uygulaması ekleyin. Yeni bir proje eklemek için <a0></a0>, Dosya menüsünden Yeni'yi tıklatın ve sonra projeyi seçin.
  2. Bir <a0>New Project</a0> iletişim kutusu görüntülenir. Visual Basic klasörü projeyi seçin... türleri bölmesi ve gelen şablonlar Console Application seçin. Şablonları</a0> bölmesinde adı kutusuna testES, hangi projenin adını yazın. Iletişim kutusunun en altında görünen Solution Ekle düğmesinin seçili olduğundan emin olun. Bu proje için çözüm eklemek için Tamam ' ı tıklatın.
  3. TestES clsES sınamak, bir başvuru eklemeniz gerekir. Çözümleri penceresinde eklediğiniz proje testES altında References klasörünü sağ tıklatın. Başvuru Ekle ' yi seçin. Bir <a0>Başvuru Ekle</a0> iletişim kutusu görüntülenir.
  4. Projeler sekmesini seçin ve sonra da prjEnterprise çift tıklatın. Başvuru, iletişim kutusunun alt bölümünde, Seçili bileşenleri, görüntülenmesi gerekir. Bu proje bu başvuru eklemek için Tamam ' ı tıklatın.
  5. Konsol uygulaması, bu testES, sağ tıklatıp ardından Başlangıç ayarla Project.
  6. Hata Ayıkla) menüsünde, Windows ' ı seçin. Alt menüde hemen seçin. Bu komut penceresi görünür olmasını gerektirir.
  7. Sub Main ve End Sub deyimleri yerine aşağıdaki sınama kod Module Module1, içine kopyalayın. Modüle aşağıdaki gibi görünmelidir:
        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. Sınama kod çalıştırmak için F5 tuşuna basın.
  9. 7. Adımda kodda dbAccess ilk Çağrı başarılı olur. Ürün 1 ve 2 ürünü bir Products tablosunda var. Ürün 1'için onOrder alan 777'için güncelleştirilir ve inStock 888 için <a1>Ürün</a1> 2 güncelleştirildiği için alan. Bu işlem başarılı oldu, çünkü komut penceresi "TRANSACTıON ONE - SUCCESS" ileti görüntülenmelidir.

    Ikinci dbAccess çağrısı başarısız. Bu nedenle, her iki tane içinde dbAccess ürünleri için güncelleştirme ekstrelerinin veritabanına tablosuna nakledilir. Ürün 1, 5'e güncelleştirilmiş onOrder alanına sahip olabilir, ancak <a1>Ürün</a1> 2 olamaz, inStock -20 ila alanını ayarlayın. Ürün Tablo tanımı'içinde tanımlanan bir kısıtlama nedeniyle inStock negatif sayılar için izin verilmez.

    Sonuç olarak, tüm işlem başarısız sonuçlanan dbAccess çağrısı başarısız. The dbAccess çağrısı önce olduğu gibi Ürünler tablosunda kalır. Catch ifadesi "TRANSACTıON FAıLURE" komut penceresi içinde görüntülenen iletide kaynaklanan dbAccess, hareket hatasından bildirim işler.
SQL Server Enterprise Manager'ı kullanarak Northwind Products tablosunun içeriğini inceleyin. Ürün 1'i görüntülediğinizde onOrder alan 777; ürün 2, eşittir instock 888 bir alandır. Bu nedenle, bu alanlar için başka değerler de olmuş olabilir, dbAccess ikinci çağrısı başarısız oldu.

SORUN GİDERME

  • COM + hizmetlerini kullanan herhangi bir proje kesin adı olduğundan emin olun.
  • COM + hizmetlerini kullanan herhangi bir sınıf System.EnterpriseServices'ı ad boşluğunda bulunan servis verilen bileşeninden devralınmalıdır.
  • 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. Zaman aşımına uğramadan önce herhangi bir işlem tamamlamak için aşağıda, ilişkili yöntemi 1.200 saniye alır:
    <Transaction(TransactionOption.Required, timeout:=1200) >

Referanslar

Ek bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitelerini ziyaret edin:
COM + ıntegration: Uygulamaları, .NET Enterprise Services yardımcı olabilir, nasıl Build Dağıtılmış
http://msdn.microsoft.com/msdnmag/issues/01/10/complus/

Servis verilen bileşenleri
http://msdn.microsoft.com/en-us/library/aa289839.aspx

Özellikler

Makale numarası: 315707 - Last Review: 8 Kasım 2005 Salı - Gözden geçirme: 3.2
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Anahtar Kelimeler: 
kbmt kbhowtomaster KB315707 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:315707

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