Aracılığıyla paylaş


Birden Çok Sonuç Kümesini İşlemek için IMultipleResults Kullanma

Şunlar için geçerlidir:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalitik Platform Sistemi (PDW)Microsoft Fabric'te SQL veritabanı

OLE DB sürücüsünü indirme

Tüketiciler, SQL Server komut çalıştırma için OLE DB Driver tarafından gönderilen sonuçları işlemek için IMultipleResults arayüzünü kullanır. SQL Server için OLE DB Sürücüsü çalıştırma için bir komut gönderdiğinde, SQL Server ifadeleri çalıştırır ve sonuçları döndürür.

Bir istemci, komut çalıştırma sonuçlarının tamamını işlemek zorundadır. SQL Server komut yürütmesi için OLE DB Sürücüsü, birden fazla satır kümesi nesnesini sonuç olarak oluşturabildiğinden, uygulama veri alımının istemci tarafından başlatılan dönüş sürecini tamamlamasını sağlamak için IMultipleResults arayüzünü kullanın.

Aşağıdaki Transact-SQL ifadesi, bazıları OrderDetails tablosundan satır verilerini, bazıları ise COMPUTE BY cümlesinin sonuçlarını içeren birden fazla satır kümesi üretir:

SELECT OrderID, FullPrice = (UnitPrice * Quantity), Discount,  
    Discounted = UnitPrice * (1 - Discount) * Quantity  
FROM OrderDetails  
ORDER BY OrderID  
COMPUTE  
    SUM(UnitPrice * Quantity), SUM(UnitPrice * (1 - Discount) * Quantity)  
    BY OrderID  

Bir tüketici bu metni içeren bir komutu çalıştırıp sonuç arayüzü olarak bir satır kümesi isterse, yalnızca ilk satır seti döner. Tüketici, iade edilen sıra setindeki tüm satırları işleyebilir. Ancak, DBPROP_MULTIPLECONNECTIONS veri kaynağı özelliği VARIANT_FALSE olarak ayarlanmışsa ve bağlantıda MARS etkin değilse, oturum nesnesinde başka komutlar çalıştırılamaz (SQL Server için OLE DB Sürücüsü başka bir bağlantı oluşturmaz) ta ki komut iptal edilene kadar. Bağlantıda MARS etkinleşmemişse, SQL Server için OLE DB Sürücüsü DBPROP_MULTIPLECONNECTIONS VARIANT_FALSE ise DB_E_OBJECTOPEN hatası verir ve aktif bir işlem varsa E_FAIL döner.

SQL Server için OLE DB Sürücüsü, akışlı çıktı parametreleri kullanıldığında ve uygulama IMultipleResults::GetResults çağırmadan önce tüm geri dönen çıktı parametre değerlerini tüketmediğinde DB_E_OBJECTOPEN döndürür. MARS etkinleşmemişse ve bağlantı bir sıra kümesi üretmeyen veya sunucu imleci olmayan bir satır kümesi üreten bir komutu çalıştırmakla meşgulse, ve DBPROP_MULTIPLECONNECTIONS veri kaynağı özelliği VARIANT_TRUE olarak ayarlanmışsa, SQL Server için OLE DB Sürücüsü eşzamanlı komut nesnelerini desteklemek için ek bağlantılar oluşturur, Bir işlem aktifse ve hata döndürüyorsa. İşlemler ve kilitleme, bağlantı başına SQL Server tarafından yönetilir. İkinci bir bağlantı oluşturulursa, ayrı bağlantılardaki komut kilitleri paylaşmaz. Bir komutun diğerini engellememesi için diğer komutun istenen satırlarda kilitler tutulması dikkat edilmelidir. MARS etkinse, bağlantılarda birden fazla komut aktif olabilir ve açık işlemler kullanılıyorsa, komutların hepsi ortak bir işlemi paylaşır.

Tüketici, komutu ISSAbort::Abort kullanarak veya komut nesnesi ve türetilen satır kümesi üzerindeki tüm referansları serbest bırakarak iptal edebilir.

IMultipleResults kullanımı, tüm durumlarda tüketicinin komut çalıştırma ile oluşturulan tüm satır kümelerini almasını sağlar ve kullanıcıların komut çalıştırmanın ne zaman iptal edileceğini ve oturum nesnesini diğer komutlar için serbest bırakmasını sağlar.

Uyarı

SQL Server imleci kullandığınızda, komut çalıştırma imleci oluşturur. SQL Server, imleç oluşturma sürecinde başarı veya başarısızlık döndürür; bu nedenle, SQL Server örneğine dönüş işlemi komut yürütmesinden sonra tamamlanır. Her GetNextRows çağrısı gidiş-dönüş dönüşü haline gelir. Bu şekilde, birden fazla aktif komut nesnesi var olabilir ve her biri sunucu imlecinden bir getirme sonucu bir satır kümesini işler. Daha fazla bilgi için Rowsets ve SQL Server Cursors'a bakınız.

Ayrıca Bkz.

Komutlar