--- title: "Persisted Data Source Objects | Microsoft Docs" ms.custom: "" ms.date: "03/14/2017" ms.prod: "sql-server-2016" ms.reviewer: "" ms.suite: "" ms.technology: - "docset-sql-devref" ms.tgt_pltfrm: "" ms.topic: "reference" helpviewer_keywords: - "OLE DB data source objects [SQL Server Native Client]" - "data source objects [OLE DB]" - "SQL Server Native Client OLE DB provider, persisted data source objects" - "persisted data source objects" ms.assetid: dfdacc81-42fe-4f20-8969-bed1f743defe caps.latest.revision: 29 author: "JennieHubbard" ms.author: "jhubbard" manager: "jhubbard" --- # Persisted Data Source Objects [!INCLUDE[SNAC_Deprecated](../../includes/snac-deprecated.md)] The [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] Native Client OLE DB provider supports persisted data source objects with the **IPersistFile** interface. ## Examples **A. Persist data source initialization:** This example shows a function that persists data source initialization properties defining a server, database, and the use of the Windows Authentication Mode for connection. The server name and database name are received in the *pLocation* and *pDatasource* parameters of the function. ``` HRESULT SetAndSaveInitProps ( IDBInitialize* pIDBInitialize, WCHAR* pDataSource, WCHAR* pCatalog, BOOL bUseWinNTAuth ) { const ULONG nProps = 4; ULONG nSSProps; ULONG nPropSets; ULONG nProp; IDBProperties* pIDBProperties = NULL; IPersistFile* pIPersistFile = NULL; DBPROP aInitProps[nProps]; DBPROP* aSSInitProps = NULL; DBPROPSET* aInitPropSets = NULL; HRESULT hr; nSSProps = 0; nPropSets = 1; aInitPropSets = new DBPROPSET[nPropSets]; // Initialize common property options. for (nProp = 0; nProp < nProps; nProp++) { VariantInit(&aInitProps[nProp].vValue); aInitProps[nProp].dwOptions = DBPROPOPTIONS_REQUIRED; aInitProps[nProp].colid = DB_NULLID; } // Level of prompting that will be done to complete the connection // process. aInitProps[0].dwPropertyID = DBPROP_INIT_PROMPT; aInitProps[0].vValue.vt = VT_I2; aInitProps[0].vValue.iVal = DBPROMPT_NOPROMPT; // Server name. aInitProps[1].dwPropertyID = DBPROP_INIT_DATASOURCE; aInitProps[1].vValue.vt = VT_BSTR; aInitProps[1].vValue.bstrVal = SysAllocString(pDataSource); // Database. aInitProps[2].dwPropertyID = DBPROP_INIT_CATALOG; aInitProps[2].vValue.vt = VT_BSTR; aInitProps[2].vValue.bstrVal = SysAllocString(pCatalog); aInitProps[3].dwPropertyID = DBPROP_AUTH_INTEGRATED; if (bUseWinNTAuth == TRUE) { aInitProps[3].vValue.vt = VT_BSTR; aInitProps[3].vValue.bstrVal = SysAllocString(L"SSPI"); } //end if // Now that properties are set, construct the PropertySet array. aInitPropSets[0].guidPropertySet = DBPROPSET_DBINIT; aInitPropSets[0].cProperties = nProps; aInitPropSets[0].rgProperties = aInitProps; // Set initialization properties pIDBInitialize->QueryInterface(IID_IDBProperties, (void**) &pIDBProperties); hr = pIDBProperties->SetProperties(nPropSets, aInitPropSets); if (FAILED(hr)) { // Display error from failed SetProperties. } pIDBProperties->Release(); // Free references on OLE known strings. for (nProp = 0; nProp < nProps; nProp++) { if (aInitProps[nProp].vValue.vt == VT_BSTR) SysFreeString(aInitProps[nProp].vValue.bstrVal); } for (nProp = 0; nProp < nSSProps; nProp++) { if (aSSInitProps[nProp].vValue.vt == VT_BSTR) SysFreeString(aSSInitProps[nProp].vValue.bstrVal); } // Free dynamically allocated memory. delete [] aInitPropSets; delete [] aSSInitProps; // On success, persist the data source. if (SUCCEEDED(hr)) { pIDBInitialize->QueryInterface(IID_IPersistFile, (void**) &pIPersistFile); hr = pIPersistFile->Save(OLESTR("MyDataSource.txt"), FALSE); if (FAILED(hr)) { // Display errors from IPersistFile interface. } pIPersistFile->Release(); } return (hr); } ``` **B. Use persisted data source initialization:** This example uses a persisted data source object with additional initialization properties that provide a [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] login and password. ``` HRESULT InitFromPersistedDS ( IDBInitialize* pIDBInitialize, WCHAR* pPersistedDSN, WCHAR* pUID, WCHAR* pPWD ) { //const ULONG nProps = 3; const ULONG nProps = 1; const ULONG nPropSets = 1; ULONG nProp; IDBProperties* pIDBProperties = NULL; IPersistFile* pIPersistFile = NULL; DBPROP aInitProps[nProps]; DBPROPSET aInitPropSets[nPropSets]; HRESULT hr; // First load the persisted data source information. pIDBInitialize->QueryInterface(IID_IPersistFile, (void**) &pIPersistFile); hr = pIPersistFile->Load(pPersistedDSN, STGM_DIRECT); if (FAILED(hr)) { // Display errors from IPersistFile interface. } pIPersistFile->Release(); if (FAILED(hr)) { return (hr); } // Initialize common property options. for (nProp = 0; nProp < nProps; nProp++) { VariantInit(&aInitProps[nProp].vValue); aInitProps[nProp].dwOptions = DBPROPOPTIONS_REQUIRED; aInitProps[nProp].colid = DB_NULLID; } // Level of prompting that will be done to complete the connection // process. aInitProps[0].dwPropertyID = DBPROP_INIT_PROMPT; aInitProps[0].vValue.vt = VT_I2; aInitProps[0].vValue.iVal = DBPROMPT_NOPROMPT; // Now that properties are set, construct the PropertySet array. aInitPropSets[0].guidPropertySet = DBPROPSET_DBINIT; aInitPropSets[0].cProperties = nProps; aInitPropSets[0].rgProperties = aInitProps; // Set initialization properties pIDBInitialize->QueryInterface(IID_IDBProperties, (void**) &pIDBProperties); hr = pIDBProperties->SetProperties(nPropSets, aInitPropSets); if (SUCCEEDED(hr)) { hr = pIDBInitialize->Initialize(); if (FAILED(hr)) { DumpError(pIDBInitialize, IID_IDBInitialize); } } else { // Display error from failed SetProperties. } pIDBProperties->Release(); // Free references on OLE known strings. for (nProp = 0; nProp < nProps; nProp++) { if (aInitProps[nProp].vValue.vt == VT_BSTR) SysFreeString(aInitProps[nProp].vValue.bstrVal); } return (hr); } ``` The **IPersistFile::Save** method can be called before or after calling **IDBInitialize::Initialize**. Calling the method after a successful return from **IDBInitialize::Initialize** ensures a valid data source specification is persisted. ## See Also [Data Source Objects (OLE DB)](../../relational-databases/native-client-ole-db-data-source-objects/data-source-objects-ole-db.md)