Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí na:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytický platformový systém (PDW)
SQL databáze v Microsoft Fabric
Ovladač OLE DB pro relaci SQL Server představuje jedno spojení s instancí SQL Serveru.
Ovladač OLE DB pro SQL Server vyžaduje, aby relace vymezovaly prostor transakcí pro datový zdroj. Všechny příkazové objekty vytvořené z konkrétního relačního objektu se účastní lokální nebo distribuované transakce relačního objektu.
První relační objekt vytvořený na inicializovaném datovém zdroji obdrží spojení se SQL Serverem navázané při inicializaci. Když jsou všechny odkazy na rozhraních objektu relace uvolněny, spojení s instancí SQL Serveru se zpřístupní k jinému objektu relace vytvořenému na datovém zdroji.
Další objekt relace vytvořený na datovém zdroji naváže vlastní spojení s instancí SQL Serveru, jak je specifikováno datovým zdrojem. Spojení s instancí SQL Serveru je ukončeno, když aplikace uvolní všechny odkazy na objekty vytvořené v dané relaci.
Následující příklad ukazuje, jak použít ovladač OLE DB pro SQL Server k připojení k databázi SQL Serveru:
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_MSOLEDBSQL, 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);
}
Připojení OLE DB Driver for SQL Server session objects k instanci SQL Serveru může generovat značnou režie pro aplikace, které neustále vytvářejí a uvolňují relace objekty. Režie může být minimalizována efektivním řízením OLE DB ovladače pro objekty relace SQL Serveru. OLE DB Driver pro aplikace SQL Server může udržovat aktivní spojení SQL Server relačního objektu tím, že udržuje referenci alespoň na jednom rozhraní objektu.
Například udržování poolu odkazů na objekty pro tvorbu příkazů udržuje aktivní spojení pro objekty relace v poolu. Protože jsou potřeba objekty relace, kód údržby poolu předává platný ukazatel rozhraní IDBCreateCommand na aplikační metodu vyžadující relaci. Když aplikační metoda již relaci nevyžaduje, metoda vrací ukazatel rozhraní zpět do kódu údržby poolu místo toho, aby uvolnila odkaz aplikace na objekt pro vytvoření příkazu.
Poznámka:
V předchozím příkladu je rozhraní IDBCreateCommand použito proto, že ICommand implementuje metodu GetDBSession , což je jediná metoda v rozsahu příkazů nebo řádků, která umožňuje objektu určit relaci, na které byl vytvořen. Proto příkazový objekt, a pouze příkazový objekt, umožňuje aplikaci získat ukazatel datového zdroje, ze kterého lze vytvářet další relace.