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

Ö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
Bu makale arşivlenmiştir. "Olduğu gibi" sunulmaktadır ve bundan sonra güncelleştirilmeyecektir.
Ö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.

back to the top

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
back to the top

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.EnterpriseServicesImports 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 clsESInherits 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ı.
back to the top

Tam kod listesi

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

Ç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.

back to the top

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) >
back to the top
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
back to the top

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 315707 - Son İnceleme: 12/07/2015 08:36:22 - Düzeltme: 3.2

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

  • kbnosurvey kbarchive kbmt kbhowtomaster KB315707 KbMttr
Geri bildirim