Share via


Oturumlar

A SQL Serverbir örneğini tek bir bağlantı yerel istemci ole db sağlayıcısı oturumu temsil SQL Server. 

SQL ServerYerel istemci ole db sağlayıcısı gerektirir oturumları veri kaynağı için hareket alanı sınırlandırmak. Özel oturum nesnesinden oluşturulan tüm command nesnelerinin session nesnesi yerel ya da dağıtılmış işlemde katılmak.

Başlatılmamış veri kaynağı üzerinde oluşturulan ilk session nesnesini alır SQL Serverbağlantı başlatma sırasında kuruldu. Tüm başvuruda bulunduğunda nesne serbest, oturumun bağlantısı örneği olan arabirimlerdeki SQL Serververi kaynağı üzerinde oluşturulan başka bir oturum nesnesi için kullanılabilir olur.

Veri kaynağı üzerinde oluşturulan bir ek oturum nesnesi örneğini kendi bağlantı kurar SQL Serververi kaynağı tarafından belirtildiği gibi. Örneği bağlantısını SQL Serveruygulama bu oturumu oluşturduğunuz nesnelere tüm başvurular yayımlandığında düştü.

Aşağıdaki örnek, nasıl kullanılacağını gösterir SQL Serverbağlanmak için yerel istemci ole db sağlayıcı bir SQL Serververitabanı:

int main()
{
    // Interfaces used in the example.
    IDBInitialize*      pIDBInitialize      = NULL;
    IDBCreateSession*   pIDBCreateSession   = NULL;
    IDBCreateCommand*   pICreateCmd1        = NULL;
    IDBCreateCommand*   pICreateCmd2        = NULL;
    IDBCreateCommand*   pICreateCmd3        = NULL;

    // Initialize COM.
    if (FAILED(CoInitialize(NULL)))
    {
        // Display error from CoInitialize.
        return (-1);
    }

    // Get the memory allocator for this task.
    if (FAILED(CoGetMalloc(MEMCTX_TASK, &g_pIMalloc)))
    {
        // Display error from CoGetMalloc.
        goto EXIT;
    }

    // Create an instance of the data source object.
    if (FAILED(CoCreateInstance(CLSID_SQLNCLI10, NULL,
        CLSCTX_INPROC_SERVER, IID_IDBInitialize, (void**)
        &pIDBInitialize)))
    {
        // Display error from CoCreateInstance.
        goto EXIT;
    }

    // The InitFromPersistedDS function 
    // performs IDBInitialize->Initialize() establishing
    // the first application connection to the instance of SQL Server.
    if (FAILED(InitFromPersistedDS(pIDBInitialize, L"MyDataSource",
        NULL, NULL)))
    {
        goto EXIT;
    }

    // The IDBCreateSession interface is implemented on the data source
    // object. Maintaining the reference received maintains the 
    // connection of the data source to the instance of SQL Server.
    if (FAILED(pIDBInitialize->QueryInterface(IID_IDBCreateSession,
        (void**) &pIDBCreateSession)))
    {
        // Display error from pIDBInitialize.
        goto EXIT;
    }

    // Releasing this has no effect on the SQL Server connection
    // of the data source object because of the reference maintained by
    // pIDBCreateSession.
    pIDBInitialize->Release();
    pIDBInitialize = NULL;

    // The session created next receives the SQL Server connection of
    // the data source object. No new connection is established.
    if (FAILED(pIDBCreateSession->CreateSession(NULL,
        IID_IDBCreateCommand, (IUnknown**) &pICreateCmd1)))
    {
        // Display error from pIDBCreateSession.
        goto EXIT;
    }

    // A new connection to the instance of SQL Server is established to support the
    // next session object created. On successful completion, the
    // application has two active connections on the SQL Server.
    if (FAILED(pIDBCreateSession->CreateSession(NULL,
        IID_IDBCreateCommand, (IUnknown**) &pICreateCmd2)))
    {
        // Display error from pIDBCreateSession.
        goto EXIT;
    }

    // pICreateCmd1 has the data source connection. Because the
    // reference on the IDBCreateSession interface of the data source
    // has not been released, releasing the reference on the session
    // object does not terminate a connection to the instance of SQL Server.
    // However, the connection of the data source object is now 
    // available to another session object. After a successful call to 
    // Release, the application still has two active connections to the 
    // instance of SQL Server.
    pICreateCmd1->Release();
    pICreateCmd1 = NULL;

    // The next session created gets the SQL Server connection
    // of the data source object. The application has two active
    // connections to the instance of SQL Server.
    if (FAILED(pIDBCreateSession->CreateSession(NULL,
        IID_IDBCreateCommand, (IUnknown**) &pICreateCmd3)))
    {
        // Display error from pIDBCreateSession.
        goto EXIT;
    }

EXIT:
    // Even on error, this does not terminate a SQL Server connection 
    // because pICreateCmd1 has the connection of the data source 
    // object.
    if (pICreateCmd1 != NULL)
        pICreateCmd1->Release();

    // Releasing the reference on pICreateCmd2 terminates the SQL
    // Server connection supporting the session object. The application
    // now has only a single active connection on the instance of SQL Server.
    if (pICreateCmd2 != NULL)
        pICreateCmd2->Release();

    // Even on error, this does not terminate a SQL Server connection 
    // because pICreateCmd3 has the connection of the 
    // data source object.
    if (pICreateCmd3 != NULL)
        pICreateCmd3->Release();

    // On release of the last reference on a data source interface, the
    // connection of the data source object to the instance of SQL Server is broken.
    // The example application now has no SQL Server connections active.
    if (pIDBCreateSession != NULL)
        pIDBCreateSession->Release();

    // Called only if an error occurred while attempting to get a 
    // reference on the IDBCreateSession interface of the data source.
    // If so, the call to IDBInitialize::Uninitialize terminates the 
    // connection of the data source object to the instance of SQL Server.
    if (pIDBInitialize != NULL)
    {
        if (FAILED(pIDBInitialize->Uninitialize()))
        {
            // Uninitialize is not required, but it fails if an
            // interface has not been released. Use it for
            // debugging.
        }
        pIDBInitialize->Release();
    }

    if (g_pIMalloc != NULL)
        g_pIMalloc->Release();

    CoUninitialize();
    
    return (0);
}

int main()
{
    // Interfaces used in the example.
    IDBInitialize*      pIDBInitialize      = NULL;
    IDBCreateSession*   pIDBCreateSession   = NULL;
    IDBCreateCommand*   pICreateCmd1        = NULL;
    IDBCreateCommand*   pICreateCmd2        = NULL;
    IDBCreateCommand*   pICreateCmd3        = NULL;

    // Initialize COM.
    if (FAILED(CoInitialize(NULL)))
    {
        // Display error from CoInitialize.
        return (-1);
    }

    // Get the memory allocator for this task.
    if (FAILED(CoGetMalloc(MEMCTX_TASK, &g_pIMalloc)))
    {
        // Display error from CoGetMalloc.
        goto EXIT;
    }

    // Create an instance of the data source object.
    if (FAILED(CoCreateInstance(CLSID_SQLNCLI10, NULL,
        CLSCTX_INPROC_SERVER, IID_IDBInitialize, (void**)
        &pIDBInitialize)))
    {
        // Display error from CoCreateInstance.
        goto EXIT;
    }

    // The InitFromPersistedDS function 
    // performs IDBInitialize->Initialize() establishing
    // the first application connection to the instance of SQL Server.
    if (FAILED(InitFromPersistedDS(pIDBInitialize, L"MyDataSource",
        NULL, NULL)))
    {
        goto EXIT;
    }

    // The IDBCreateSession interface is implemented on the data source
    // object. Maintaining the reference received maintains the 
    // connection of the data source to the instance of SQL Server.
    if (FAILED(pIDBInitialize->QueryInterface(IID_IDBCreateSession,
        (void**) &pIDBCreateSession)))
    {
        // Display error from pIDBInitialize.
        goto EXIT;
    }

    // Releasing this has no effect on the SQL Server connection
    // of the data source object because of the reference maintained by
    // pIDBCreateSession.
    pIDBInitialize->Release();
    pIDBInitialize = NULL;

    // The session created next receives the SQL Server connection of
    // the data source object. No new connection is established.
    if (FAILED(pIDBCreateSession->CreateSession(NULL,
        IID_IDBCreateCommand, (IUnknown**) &pICreateCmd1)))
    {
        // Display error from pIDBCreateSession.
        goto EXIT;
    }

    // A new connection to the instance of SQL Server is established to support the
    // next session object created. On successful completion, the
    // application has two active connections on the SQL Server.
    if (FAILED(pIDBCreateSession->CreateSession(NULL,
        IID_IDBCreateCommand, (IUnknown**) &pICreateCmd2)))
    {
        // Display error from pIDBCreateSession.
        goto EXIT;
    }

    // pICreateCmd1 has the data source connection. Because the
    // reference on the IDBCreateSession interface of the data source
    // has not been released, releasing the reference on the session
    // object does not terminate a connection to the instance of SQL Server.
    // However, the connection of the data source object is now 
    // available to another session object. After a successful call to 
    // Release, the application still has two active connections to the 
    // instance of SQL Server.
    pICreateCmd1->Release();
    pICreateCmd1 = NULL;

    // The next session created gets the SQL Server connection
    // of the data source object. The application has two active
    // connections to the instance of SQL Server.
    if (FAILED(pIDBCreateSession->CreateSession(NULL,
        IID_IDBCreateCommand, (IUnknown**) &pICreateCmd3)))
    {
        // Display error from pIDBCreateSession.
        goto EXIT;
    }

EXIT:
    // Even on error, this does not terminate a SQL Server connection 
    // because pICreateCmd1 has the connection of the data source 
    // object.
    if (pICreateCmd1 != NULL)
        pICreateCmd1->Release();

    // Releasing the reference on pICreateCmd2 terminates the SQL
    // Server connection supporting the session object. The application
    // now has only a single active connection on the instance of SQL Server.
    if (pICreateCmd2 != NULL)
        pICreateCmd2->Release();

    // Even on error, this does not terminate a SQL Server connection 
    // because pICreateCmd3 has the connection of the 
    // data source object.
    if (pICreateCmd3 != NULL)
        pICreateCmd3->Release();

    // On release of the last reference on a data source interface, the
    // connection of the data source object to the instance of SQL Server is broken.
    // The example application now has no SQL Server connections active.
    if (pIDBCreateSession != NULL)
        pIDBCreateSession->Release();

    // Called only if an error occurred while attempting to get a 
    // reference on the IDBCreateSession interface of the data source.
    // If so, the call to IDBInitialize::Uninitialize terminates the 
    // connection of the data source object to the instance of SQL Server.
    if (pIDBInitialize != NULL)
    {
        if (FAILED(pIDBInitialize->Uninitialize()))
        {
            // Uninitialize is not required, but it fails if an
            // interface has not been released. Use it for
            // debugging.
        }
        pIDBInitialize->Release();
    }

    if (g_pIMalloc != NULL)
        g_pIMalloc->Release();

    CoUninitialize();
    
    return (0);
}

Bağlanma SQL Serveryerel istemci ole db sağlayıcısı oturum nesneler örneğine SQL Serversürekli oluşturmak ve oturum nesnelerini bırakın uygulamaları için önemli ek yük oluşturabilir. Yükü yöneterek minimize edilebilir SQL Serveryerel istemci ole db sağlayıcısı oturumu nesneleri etkili. SQL ServerYerel istemci ole db sağlayıcı uygulamalar tutabilir SQL Serverbaşvuru nesnesinin en az bir arabirim üzerinde tutarak etkin bir oturum nesnesi bağlantısı.

Örneğin, komut oluşturma nesne başvurularını bir havuz bakımı için oturum nesneler etkin bağlantıları havuzda tutar. Session nesneleri gerektiğinde, havuz bakım kodu geçerli bir geçer IDBCreateCommand arabirim işaretçisi oturumu gerektiren uygulama yöntemi. Uygulama yöntemi artık oturum gerektirdiğinde, yöntem arabirim işaretçisi sırt-e doğru uygulamanın komut oluşturma nesnesine başvuru bırakmadan yerine, havuz bakım kodunu döndürür.

[!NOT]

Önceki örnekte, IDBCreateCommand arabirimi kullanılır çünkü ICommand arabirim Implements GetDBSession yöntemi, tek yöntem bir nesne üzerinde oluşturulduğu oturumu belirlemek izin veren komut veya satır kümesi kapsamında. Bu nedenle, bir command nesnesi ve yalnızca bir komut nesnesi, ek oturum oluşturulabileceği bir veri kaynağı nesne işaretçisi almak bir uygulama sağlar.

Ayrıca bkz.

Kavramlar

Veri kaynağı nesneleri (ole db)