Objek Sumber Data Persisten di SQL Server Native Client
Berlaku untuk: SQL Server Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)
Penting
SNAC SQL Server Native Client (sering disingkat) telah dihapus dari SQL Server 2022 (16,x) dan SQL Server Management Studio 19 (SSMS). Penyedia SQL Server Native Client OLE DB (SQLNCLI atau SQLNCLI11) dan Penyedia Microsoft OLE DB warisan untuk SQL Server (SQLOLEDB) tidak direkomendasikan untuk pengembangan baru. Beralih ke Microsoft OLE DB Driver (MSOLEDBSQL) baru untuk SQL Server ke depannya.
Penyedia SQL Server Native Client OLE DB mendukung objek sumber data yang bertahan dengan antarmuka IPersistFile.
Contoh
A. Pertahankan inisialisasi sumber data:
Contoh ini memperlihatkan fungsi yang mempertahankan properti inisialisasi sumber data yang menentukan server, database, dan penggunaan Mode Autentikasi Windows untuk koneksi. Nama server dan nama database diterima dalam parameter pLocation dan pDatasource fungsi.
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. Gunakan inisialisasi sumber data yang bertahan:
Contoh ini menggunakan objek sumber data yang bertahan dengan properti inisialisasi tambahan yang menyediakan login dan kata sandi SQL Server.
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);
}
Metode IPersistFile::Save dapat dipanggil sebelum atau sesudah memanggil IDBInitialize::Initialize. Memanggil metode setelah pengembalian yang berhasil dari IDBInitialize::Initialize memastikan spesifikasi sumber data yang valid tetap ada.
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk