Aracılığıyla paylaş


Çoklu Active sonucu kullanarak (mars) ayarlar

SQL Server 2005(mars) birden çok etkin sonuç kümeleri için destek erişim uygulamalarında kullanılmaya Veritabanı Altyapısı.Önceki sürümlerinde SQL Server, veritabanı uygulamaları korumak birden çok etkin deyimleri bağlantı.When using SQL Server default result sets, the application had to process or cancel all result sets from one batch before it could execute any other batch on that connection.SQL Server 2005 introduced a new connection attribute that allows applications to have more than one pending request per connection, and in particular, to have more than one active default result set per connection.

mars, aşağıdaki yeni özellikleri ile uygulama tasarım basitleştirir:

  • Uygulamalar, birden çok varsayılan olabilir sonucu açık ayarlar ve bunları okumaya Interleave.

  • Uygulamaları yürütmek diğer deyimleri (örneğin, INSERT, update, delete ve saklı yordam çağrıları) varsayılan sonuç kümeleri açıkken.

mars kullanan uygulamalar aşağıdaki yönergeleri yararlı bulabilirsiniz:

  • Varsayılan sonuçlar kümeleri tek sql deyimleri (select, dml çıktı, alma, metin okuma ve benzeri) tarafından oluşturulan kısa süreli veya kısa sonuçlar kümeleri için kullanılmalıdır.

  • Sunucu imleçleri tek sql deyimleri tarafından oluşturulan uzun süreli veya büyük sonuç kümeleri için kullanılmalıdır.

  • Her zaman mı sonuçlar veya değil döndürmeleri bakılmaksızın yordam istekleri ve birden çok sonuçlar döndüren toplu işlemleri sonuçlar sonuna kadar okuyun.

  • Her mümkün olduğunda, bağlantı özelliklerini değiştirmek ve tercih edin hareketlerini yönetmek için API çağrıları kullanmak Transact-SQL deyimleri.

  • Eşzamanlı toplu işler çalıştırılırken mars içinde oturum kapsamlı kimliğe bürünme yasaktır.

Not

mars işlevi varsayılan olarak etkin değildir.mars bağlanırken kullanılacak SQL Server ile SQL Server Native Client, özellikle etkinleştirmeniz gerekir, bir bağlantı içinde dize.Daha fazla bilgi için bkz: SQL Server yerel istemci ole db sağlayıcı ve SQL Server yerel istemci odbc sürücüsü bölümlerde, daha sonra bu konuda.

SQL Server Yerel istemci bağlantısı etkin deyimleri sayısını sınırlamaz.

Birden fazla tek deyimli toplu iş veya saklı yordamı aynı anda çalıştırmak için gerekli değildir tipik uygulamalar saat mars mars nasıl uygulanan anlama gerek kalmadan yararlanacaktır.Ancak, daha karmaşık gereksinimleri olan uygulamalar bu hesaba katmanız gerekir.

mars, tek bir bağlantı içinde birden çok istek Aralanmış yürütülmesini sağlar.Yani, bir toplu iş iş işlemi çalıştırmak izin verir ve içinde yürütülmesini, diğer istekleri yürütmek tanır.Ancak, mars, paralel yürütme açısından değil Transparency cinsinden tanımlanır unutmayın.

Yürütme iyi tanımlanmış noktalarda yalnızca değiştirilebilir ancak araya eklenmiş bir biçimde yürütmek birden çok toplu işlemi mars altyapı sağlar.Buna ek olarak, çoğu deyimleri toplu iş içinde atomically çalıştırmanız gerekir.Hangi satırların dönmek deyimleri istemci, hangi adlandırılır olarak Ödeme noktaları, tamamlanmadan önce yürütme sırasında satırlar için gönderilen Interleave izin verilir istemci, örneğin:

  • SEÇİN

  • GETİRME

  • ALMA

Diğer mars isteklere parçası bir saklı yordam veya toplu iş yürütme tamamlanmadan çalıştırmanız gerekir olarak yürütülen diğer ifadeler değiştirilebilir.

Bir dizi etken tarafından toplu işlemleri yürütme Interleave kesin bir şekilde etkilediği ve verimi noktaları içeren birden çok toplu işlem komutları yürütülecek tam sırası tahmin etmek zordur.Aralanmış yürütülmesi gibi karmaşık toplu işlemleri yüzünden istenmeyen yan etkileri önlemek dikkatli olun.

API çağrıları kullanarak sorunları önlemek yerine Transact-SQL ifadeleri ve seri hale getirilirken, böyle toplu tüketen veya iptal etme tarafından yürütülmesini değil Bu ifadeler de içeren Ödeme noktaları, multi-deyim toplu dahil olmak üzere tarafından bağlantı durumu (KÜMESİ kullanın) ve hareketleri (başlamak tran, TAMAMLAMA, rollback) yönetmetüm sonuçlar.

Not

Bir toplu iş veya el ile başlayan bir saklı yordam veya örtük işlem mars etkin olduğunda toplu çıkar önce hareket tamamlamanız gerekir.Yoksa SQL Server hareket tarafından yapılan tüm değişiklikleri geri alır, toplu iş iş iş tamamlanmadan.Böyle bir hareket tarafından yönetilen SQL Server olarak bir toplu iş kapsamlı hareket.Bu hareket içinde kullanılmaya başlanan yeni bir tür, SQL Server 2005 mars etkin olduğunda kullanılacak varolan sure saklı yordamları etkinleştirmek için.Toplu iş kapsamlı hareketleri hakkında daha fazla bilgi için bkz: TRANSACTION deyimlerini (Transact-sql) ve Kontrol eden hareketleri (veritabanı altyapısı).

ADO'dan mars kullanarak örnek için bkz: SQL Server yerel istemci ile ado kullanma.

SQL Server Native Client OLE DB Sağlayıcısı

The SQL Server Native Client OLE DB provider supports MARS through the addition of the SSPROP_INIT_MARSCONNECTION data source initialization property, which is implemented in the DBPROPSET_SQLSERVERDBINIT property set.Buna ek olarak, yeni bir bağlantı dize anahtar sözcüğü, MarsConneklenmiş gibi.Bunu kabul eden true veya false değerleri; falsevarsayılandır.

Üzerine yazılmasına özellik DBPROP_MULTIPLECONNECTIONS varsayılan veri kaynak.Bu sağlayıcı birden çok eşzamanlı komut ve satır kümesi nesneleri desteklemek için birden çok bağlantı oluşturabilir anlamına gelir.mars etkin olduğunda, SQL Server Native Client, birden çok komut ve satır küme nesneleri tek bir bağlantı, böylece MULTIPLE_CONNECTIONS VARIANT_FALSE varsayılan olarak küme destekleyebilmesi

DBPROPSET_SQLSERVERDBINIT özellik küme için yapılan geliştirmeler hakkında daha fazla bilgi için bkz: Başlatma ve yetkilendirme özellikleri.

sql Server yerel istemcisi ole db sağlayıcısı örneği

Bu örnekte, veri kaynak nesne kullanılarak oluşturulan SQL Server doğal ole db sağlayıcı ve mars etkin dbprop kullanarakküme_SQLSERVERDBINIT özellik küme önce oturum nesnesi oluşturulur.

#include <sqlncli.h>

IDBInitialize *pIDBInitialize = NULL;
IDBCreateSession *pIDBCreateSession = NULL;
IDBProperties *pIDBProperties = NULL;

// Create the data source object.
hr = CoCreateInstance(CLSID_SQLNCLI10, NULL,
   CLSCTX_INPROC_SERVER,
   IID_IDBInitialize, 
    (void**)&pIDBInitialize);

hr = pIDBInitialize->QueryInterface(IID_IDBProperties, (void**)&pIDBProperties);

// Set the MARS property.
DBPROP rgPropMARS;

// The following is necessary since MARS is off by default.
rgPropMARS.dwPropertyID = SSPROP_INIT_MARSCONNECTION;
rgPropMARS.dwOptions = DBPROPOPTIONS_REQUIRED;
rgPropMARS.dwStatus = DBPROPSTATUS_OK;
rgPropMARS.colid = DB_NULLID;
V_VT(&(rgPropMARS.vValue)) = VT_BOOL;
V_BOOL(&(rgPropMARS.vValue)) = VARIANT_TRUE;

// Create the structure containing the properties.
DBPROPSET PropSet;
PropSet.rgProperties = &rgPropMARS;
PropSet.cProperties = 1;
PropSet.guidPropertySet = DBPROPSET_SQLSERVERDBINIT;

// Get an IDBProperties pointer and set the initialization properties.
pIDBProperties->SetProperties(1, &PropSet);
pIDBProperties->Release();

// Initialize the data source object.
hr = pIDBInitialize->Initialize();

//Create a session object from a data source object.
IOpenRowset * pIOpenRowset = NULL;
hr = IDBInitialize->QueryInterface(IID_IDBCreateSession, (void**)&pIDBCreateSession));
hr = pIDBCreateSession->CreateSession(
   NULL,             // pUnkOuter
   IID_IOpenRowset,  // riid
  &pIOpenRowset ));  // ppSession

// Create a rowset with a firehose mode cursor.
IRowset *pIRowset = NULL;
DBPROP rgRowsetProperties[2];

// To get a firehose mode cursor request a 
// forward only read only rowset.
rgRowsetProperties[0].dwPropertyID = DBPROP_IRowsetLocate;
rgRowsetProperties[0].dwOptions = DBPROPOPTIONS_REQUIRED;
rgRowsetProperties[0].dwStatus = DBPROPSTATUS_OK;
rgRowsetProperties[0].colid = DB_NULLID;
VariantInit(&(rgRowsetProperties[0].vValue));
rgRowsetProperties[0].vValue.vt = VARIANT_BOOL;
rgRowsetProperties[0].vValue.boolVal = VARIANT_FALSE;

rgRowsetProperties[1].dwPropertyID = DBPROP_IRowsetChange;
rgRowsetProperties[1].dwOptions = DBPROPOPTIONS_REQUIRED;
rgRowsetProperties[1].dwStatus = DBPROPSTATUS_OK;
rgRowsetProperties[1].colid = DB_NULLID;
VariantInit(&(rgRowsetProperties[1].vValue));
rgRowsetProperties[1].vValue.vt = VARIANT_BOOL;
rgRowsetProperties[1].vValue.boolVal = VARIANT_FALSE;

DBPROPSET rgRowsetPropSet[1];
rgRowsetPropSet[0].rgProperties = rgRowsetProperties
rgRowsetPropSet[0].cProperties = 2
rgRowsetPropSet[0].guidPropertySet = DBPROPSET_ROWSET;

hr = pIOpenRowset->OpenRowset (NULL,
   &TableID,
   NULL,
   IID_IRowset,
   1,
   rgRowsetPropSet
   (IUnknown**)&pIRowset);

sql Server yerel istemci odbc sürücüsü

The SQL Server Native Client ODBC driver supports MARS through additions to the SQLSetConnectAttr and SQLGetConnectAttr functions.sql_copt_ss_mars_enabled, sql_mars_enabled_yes veya varsayılan değer olan sql_mars_enabled_no ile sql_mars_enabled_no kabul etmek için eklendi.Buna ek olarak, yeni bir bağlantı dize anahtar sözcüğü, Mars_Connectioneklenmiş gibi."Evet" kabul eder ya da "Hayır" değerleri; "Hayır" varsayılandır.

sql Server yerel istemci odbc sürücüsü örneği

Bu örnekte, SQLSetConnectAttr işlev çağırmadan önce mars etkinleştirmek için kullanılan SQLDriverConnect veritabanına bağlanmak için işlev.Bağlantı yapılan olduktan iki SQLExecDirect işlevleri aynı bağlantıda iki ayrı sonuç kümeleri oluşturmak için verilir.

#include <sqlncli.h>

SQLSetConnectAttr(hdbc, SQL_COPT_SS_MARS_ENABLED, SQL_MARS_ENABLED_YES, SQL_IS_UINTEGER);
SQLDriverConnect(hdbc, hwnd, 
   "DRIVER=SQL Server Native Client 10.0;
   SERVER=(local);trusted_connection=yes;", SQL_NTS, szOutConn, 
   MAX_CONN_OUT, &cbOutConn, SQL_DRIVER_COMPLETE);

SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt1);
SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt2);

// The 2nd execute would have failed with connection busy error if
// MARS were not enabled.
SQLExecDirect(hstmt1, L”SELECT * FROM Authors”, SQL_NTS);
SQLExecDirect(hstmt2, L”SELECT * FROM Titles”, SQL_NTS);

// Result set processing can interleave.
SQLFetch(hstmt1);
SQLFetch(hstmt2);