Makale numarası: 910696 - Son Gözden Geçirme: 28 Kasım 2007 Çarşamba - Gözden geçirme: 2.1 Bilinen sorunlar için ADODB Primary ınterop Assembly (Visual Studio 2005 ile gelen PIA)
Dikkat ADO ve ADO MD tam olarak bir Microsoft .NET Framework ortamında sınanmamıştır. Özellikle de hizmet tabanlı veya çok iş parçacıklı uygulamalarda zaman zaman sorunlara neden olabilirler. Bu makalede açıklanan teknikler ADO.NET'e geçiş sırasında yalnızca geçici bir önlem olarak kullanılmalıdır. Bu teknikler, yalnızca hiçbir uyumluluk sorunları olduğundan emin olmak için tam sınama gerçekleştirip sonra kullanmalısınız. ADO veya ADO MD bu şekilde kullanımından kaynaklanan sorunlar desteklenmez. Daha fazla bilgi için, aşağıdaki Microsoft Bilgi Bankası makalesine bakın: 840667
(http://support.microsoft.com/kb/840667/
)
Bir .NET Framework uygulamasında ADO ve ADO MD kullanırken beklenmedik bir hata alıyorsunuz Bu SayfadaGirişBu makalede, için ADODB Primary ınterop Assembly (Microsoft Visual Studio 2005 ile gelen PIA) bilinen sorunlar anlatılmaktadır. Daha fazla bilgiAtık toplama işlemi Microsoft Visual Basic 6.0 ve Microsoft Visual Basic. NET'te arasındaki farklılıklarAtık toplama işlemi Visual Basic 6.0 ve Visual Basic. NET'te arasında önemli farklar vardır. Visual Basic 6.0 atık toplama işlemi Visual Basic .NET çöp toplama ' fazla ısrarlı birincil farktır. Visual Basic 6.0, nesne kapsam dışında bir nesne örneği düştüğünde hemen hemen yayımlanır. Aynı davranış, sıradan .NET çöp toplama veya Visual Basic .NET ile oluşmaz. Nesneleri çöp toplama .NET ile zaman uyumsuz olarak yayımlanmaktadır.Atık toplama işlemi bu fark, büyük bir veri erişim kodunuzu etkisi, Visual Basic 6. 0'dan Visual Basic. NET'e taşıdığınızda olabilir. Örneğin, nesne atık toplama işlemi tarafından iadesi, açık bir ADODB Recordset nesnesini kapatıldı. Visual Basic 6.0 kod yazma deneyimi olan geliştiriciler Visual Basic. NET'e kod geçirirken değiştirir çöp toplama semantiği bağımlı. .NET atık toplama işlemi zaman uyumsuz ve deterministic olmayan olduğundan bile temel sınama gerçekleştikten sonra değişiklikleri göremeyebilir. Yalnızca Microsoft SQL Server 2000 veritabanları gibi bazı veritabanları, bağlantı tek bir etkin sonuç destekler. SQL Server için bir bağlantı açmak firehose imleç varsa, imleci kapatılıncaya kadar bağlantı engellendi. Varsayılan olarak, OLE DB sağlayıcıları, geçerli bağlantı Sorgu yürütülemiyor, sorguları yürütmek için ek bağlantılar açar. Bu nedenle, çok sayıda ActiveX Data Objects (ADO) kullanıcı bu sınırlama farkında değildir. Bu ek bağlantılar bağlantı havuzu içinde yer değil. Engellenmiş bağlantı, bir işlemde katılıyor, ek bağlantılar açma girişimleri başarısız olur. Visual Basic 6.0 kodunuzu gözden geçirin ve açıkça tüm Recordset nesneleri bağlantı kapatıp öneririz. Kodunuzu Visual Basic. NET'e'e geçirdikten sonra daha sonra kodunuzu sınayın. Bu bölüm, bu sorunun üç örnek ve her örnek için kod örnekleri listeler. Örnek 1: açık Recordset nesneleri kapatmayın ek bağlantılar açtığınızdaAşağıdaki kod örneği, Visual Basic 6.0 ile çalıştırdığınızda, yalnızca tek bir bağlantı gereklidir. Recordset nesne kapsam dışında düştüğünde ExecuteQuery yordamında oluşturulan Recordset nesnesini örtülü olarak kapatıldığından, bu geçerlidir. Kod örneği, SQL Server @@ SPID değişken sorguyu yürütmek için kullanılan sunucu işlemi tanımlayıcısı göstermek için kullanır. Kod çalıştırırsanız, sorgu @@ spid aynı değeri döndürmek görürsünüz sütun. Bu sonuç, sorguları, veritabanına aynı bağlantıda çalışacak anlamına gelir.Bu davranış ExecuteQuery yordamda oluşturulan Recordset nesnesi değil kapatıldı ve Recordset nesnesini .NET çöp toplayıcısını temizler kadar açık kalır farklıdır. Microsoft .NET Framework atık toplama işlemi zaman uyumsuz olarak gerçekleşir. SQL Server OLE DB sağlayıcısı, Recordset nesnesi ExecuteQuery yordamını yeniden çağrıldığı zaman kapatılmadı, ikinci sorguyu yürütmek için yeni bir bağlantı açar. ExecuteQuery yordamında bir ça?r? rs.Close komut eklerseniz, sorgu aynı bağlantıda yürütülen sağlayın. Ek bağlantılar açmak için SQL Server OLE DB sağlayıcısı da açıkça söyleyebilirsiniz. Bunu yapmak için <a0></a0>, hemen bağlantıyı açtığınızda aşağıdaki kod satırını ekleyin: Örnek 2: açık Recordset nesneleri kapatmayın, hareketleri ile çalışırken sorunlar oluşurEngellenmiş bağlantı, bir işlemde katılıyor, ek bağlantılar açılamıyor. Aşağıdaki kod örneği, Visual Basic 6.0 ile çalıştırdığınızda, kod, açık bir hareketi olan tek bir bağlantıda birden fazla sorgu yürütür. Kod, aşağıdaki iki işlevi çağırır:
Yeni bir bağlantı oluşturamıyor çünkü el ile veya dağıtılmış işlem modunda. Örnek 3: örtülü olarak oluşturun ve sonra da Recordset nesneleri iptal sorunlar oluşurVarsayılan olarak, Connection ve Command nesnelerinin Execute yöntemi örtülü olarak oluşturur ve yeni bir Recordset nesnesi döndürür. Visual Basic 6. 0'da, bu Recordset nesnesini bir nesne değişkeni içinde saklanır, Recordset nesnesinin kapsam dışına denk ve hemen kapatılır. Bu nedenle, aşağıdaki kod örneği, başarıyla Visual Basic 6.0 ile çalışır. Ancak, açıklanan hata iletisini alırsınız "Örnek 2: açık Recordset nesneleri kapatmayın, hareketleri ile çalışırken sorunlar ortaya" kodunu Visual Basic. NET'e geçirilirse bölümünde.Bu sorunu gidermek için <a0></a0>, Execute yöntemini, <a1>Seçenekler</a1> parametresinde ExecuteOptionsEnum değeri adExecuteNoRecords değeri geçirir. Bunu yaptığınızda, Execute yöntemi bir Recordset nesnesi aşağıdaki kod örneği. gösterildiği gibi döndürmelidir. olduğunu gösterebilir Sorun 2: Yük senaryoları için <a2>ADODB</a2> PIA önermeyizBiz kesinlikle, yük senaryolarda altında <a2>ADODB</a2> PIA gibi çok kullanıcılı Microsoft ASP.NET veya Microsoft COM + bileşenleri kullanarak engelleyin. Microsoft Sınama ekipleri ADODB PIA sınadı, sınama ekipleri ADODB PIA yük altında başarısız olduğunu buldu. .NET veri erişim kodu güvenle yük altında gerçekleştirmelisiniz, ADO.NET kullanarak kod yazma kesinlikle öneririz.Sorun 3: 64-bit modunda ADODB PIA kullanmanızı önermeyizBiz kesinlikle, 64-bit uygulamalarda ADODB PIA kullanarak engelleyin. ADODB PIA, 64-bit modunda sınanmamıştır. Çoğu 64 bitlik senaryolarda, ASP.NET veya COM + gibi yüksek stres sunucu tarafı bileşenleri içerir. ADODB PIA, yük altında çalıştırırken sorun bilinen. 64-Bit OLE DB sağlayıcıları sınırlı kullanılabilirliğini ADODB PIA ile çalışmak için daha az çarpıcı 64-bit modunda da sağlar.Sorun 4: sonradan bağlanan sorgu yürütme kullandığınızda hataları ortayaADODB iki sonradan bağlanan sorgu yürütme biçimlerini destekler. Sonradan bağlanan sorgu yürütme ıdispatch bağlama, bir Connection nesnesi yöntemleri sorguları gibi sorguları yürütmek için COM kullanmanıza olanak sağlar. ADODB sonradan bağlanan sorgu yürütme iki aşağıdaki biçimleri destekler:
Aşağıdaki örnekler, bu sorunları göstermektedir. Örnek 1: aynı ada sahip bir ikinci sonradan bağlanan sorgu oluşturursanız, sorgu başarısız olurAşağıdaki kod örneği <a0>Command</a0> nesnesinin Name özelliği için aynı değeri kullanması sonradan bağlanan iki sorgu oluşturur.Visual Basic. NET'te benzer bir kod çalıştırdığınızda komut nesnesi ikinci komut nesnesi Connection nesnesiyle ilişkilendirilmiş olan süreye göre atık toplama işlemi tarafından iadesi değil. Bu nedenle, aşağıdaki özel durum hata iletisi alabilirsiniz: Nesne koleksiyonunda zaten var. Eklenemiyor. Örnek 2: ikinci bir bağlantıda sonradan bağlanan sorguda aramak, sorguyu başarısızAşağıdaki kod örneği aşağıdaki görevleri, verildikleri sırayla gerçekleştirir:
Bu farklar, Visual Basic .NET derleyici yapmaz. Başka bir çağrı GetCount yöntem bir Connection nesnesi üzerinde yapılan durumunda "GetCount" sorgu için ilk çağrıda Visual Basic .NET derleyici yöntem imzası önbelleğe alır. Visual Basic .NET, kodu ikinci bir "GetCount" sorgu aradığında, ikinci GetCount yöntemi için önbelleğe alınmış bir yöntem imzası yeniden kullanır. ADODB benzersiz yöntemi imza oluşturur, ikinci sorguyu sonradan bağlanan çağrısı başarısız olur. Bu senaryo için yok bir geçici çözüm var. Sorun 5: Veri türü dize ADODB Variant bazı veri türlerini ayarlamak içinDize veya diğer ADODB nesneleri bazı özellikleri ayarlamak ADODB nesne modeli sağlar. Örneğin Recordset nesnesinin ActiveConnection özelliği Visual Basic 6.0 nesne tarayıcı VARIANT veri türü olarak görünür ve bir Connection nesnesi ya da bir bağlantı dizesine ayarlayabilirsiniz.Kendi nesne oluşturdunuz ve bu işlevleri desteklemek istiyorsanız, ayrı özellik erişimcisi oluşturmanız gerekir. Bunu yapmak için <a0></a0>, kodu aşağıdaki örneğe benzer bir kod kullanın.
Sorun 6: Parameters.Append yöntemini çağırdığınızda bir ınvalidcastexception özel durumu oluşuyorVisual Studio .NET 2003 ve Visual Studio 2005 bulunan ADODB PIA varsayılan oluşturucu kullanılarak oluşturulan bir Parameter nesnesi ile birlikte Parameters.Append yöntemini çağırdığınızda oluşan bilinen bir sorun var.Aşağıdaki kod örneği, ınvalidcastexception bir özel duruma neden olur. Sorun 7:, Bileşenlerle, ADO 2.8 arabirimleri çalışma sorunlarlaVisual Studio 2005 ile gelen ADODB PIA, Visual Studio .NET 2003 ile gelen ve Microsoft .NET Framework 1.1 kullanılarak oluşturulan aynı bileşendir. ADODB PIA ile ADO 2.7 arabirimleri etkileşimde bulunmak için oluşturulan ve 2.8 arabirimleri ADO ile çalışmak üzere güncelleştirilmedi.Bu nedenle, ADODB PIA, ADO 2.8 arabirimleri olacak bileşenleri ile birlikte kullanma denemesi başarısız. Bu senaryo ile <a2>ADODB</a2> PIA desteklenmiyor. Bu makaledeki bilginin uygulandığı durum:
Otomatik TercümeÖ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:910696
(http://support.microsoft.com/kb/910696/en-us/
)
| Diğer Kaynaklar Diğer Destek Siteleri
ToplulukHemen Yardım AlMakale çevirileri
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


Üste