Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Applies to:SQL Server
В этом разделе содержатся сведения о SQL Server Express LocalDB.
Code sample
В следующем образце демонстрируется использование API-интерфейса LocalDB. Перед запуском образца убедитесь в том, что база данных LocalDB установлена на компьютере. Вы можете установить LocalDB из программы установки в SQL Server Express.
// compile with: Advapi32.lib
#include <SDKDDKVer.h>
#include <stdio.h>
// To use LocalDB API, you must define LOCALDB_DEFINE_PROXY_FUNCTIONS before you include msoledbsql.h in one (and only one) of the
// source files in your program. LOCALDB_DEFINE_PROXY_FUNCTIONS causes code to be generated that binds to the LocalDB API at runtime.
#define LOCALDB_DEFINE_PROXY_FUNCTIONS
#include "msoledbsql.h"
HRESULT CreateAndStartLocalDBInstance(PWCHAR wszVersion, PWCHAR wszInstanceName) {
HRESULT hr;
if (SUCCEEDED(hr = LocalDBCreateInstance(wszVersion, wszInstanceName, 0)))
hr = LocalDBStartInstance(wszInstanceName, 0, NULL, NULL);
return hr;
}
HRESULT StopAndDeleteLocalDBInstance(PWCHAR wszInstanceName) {
HRESULT hr;
if (SUCCEEDED(hr = LocalDBStopInstance(wszInstanceName, 0, 30))) // 30 seconds timeout
hr = LocalDBDeleteInstance(wszInstanceName, 0);
return hr;
}
void PrintLocalDBError(HRESULT hr) {
HRESULT hrError;
WCHAR wszMessage[1024];
DWORD dwMessage = 1024;
if (hr == LOCALDB_ERROR_NOT_INSTALLED)
wprintf(L"Local DB is not installed.\n");
else if (hr == LOCALDB_ERROR_CANNOT_LOAD_RESOURCES)
wprintf(L"Cannot load resources for Local DB API DLL. Local DB installation is corrupted.\n");
else if (FAILED(hrError = LocalDBFormatMessage(hr, 0, 0, wszMessage, &dwMessage)))
wprintf(L"Cannot format an error message for a Local DB error code: %#x. LocalDBFormatMessage returned: %#x\n", hr, hrError);
else
wprintf(L"%s\n", wszMessage);
}
HRESULT PrintLocalDBInstances() {
HRESULT hr;
DWORD dwNumberOfInstances = 0;
if (FAILED(hr = LocalDBGetInstances(NULL, &dwNumberOfInstances)))
if (hr != LOCALDB_ERROR_INSUFFICIENT_BUFFER)
return hr;
PTLocalDBInstanceName localDBInstnces = (PTLocalDBInstanceName) malloc(dwNumberOfInstances * sizeof(TLocalDBInstanceName));
if (localDBInstnces == NULL) {
return HRESULT_FROM_WIN32(ERROR_OUTOFMEMORY);
}
if (FAILED(hr = LocalDBGetInstances(localDBInstnces, &dwNumberOfInstances))) {
free(localDBInstnces);
return hr;
}
for (DWORD i = 0; i < dwNumberOfInstances; i++) {
LocalDBInstanceInfo localDBInstanceInfo;
if (FAILED(hr = LocalDBGetInstanceInfo(localDBInstnces[i], &localDBInstanceInfo, sizeof(localDBInstanceInfo)))) {
free(localDBInstnces);
return hr;
}
wprintf(L"Name: %s State: %s Version: %u.%u.%u.%u\n",
localDBInstnces[i],
localDBInstanceInfo.bIsRunning ? L"running" : L"stopped",
localDBInstanceInfo.dwMajor,
localDBInstanceInfo.dwMinor,
localDBInstanceInfo.dwBuild,
localDBInstanceInfo.dwRevision);
}
free(localDBInstnces);
return S_OK;
}
int main() {
HRESULT hr;
WCHAR wszInstanceName[] = L"Contoso";
WCHAR wszVersion[] = L"11.0";
if (FAILED(hr = CreateAndStartLocalDBInstance(wszVersion, wszInstanceName)))
PrintLocalDBError(hr);
PrintLocalDBInstances();
if (FAILED(hr = StopAndDeleteLocalDBInstance(wszInstanceName)))
PrintLocalDBError(hr);
PrintLocalDBInstances();
}