Поделиться через


Использование объектов ошибок OLE DB (SQL Server Compact Edition)

При возникновении ошибки во время выполнения приложения, основанного на SQL Server 2005 Compact Edition (SQL Server Compact Edition), поставщик OLE DB для SQL Server Compact Edition возвращает и сохраняет массив объектов ошибок. Затем к этим объектам можно обращаться с помощью OLE DB обычным способом. Поставщик OLE DB для SQL Server Compact Edition возвращает ошибки для всех поддерживаемых интерфейсов. Дополнительные сведения см. в разделе Реализованные интерфейсы OLE DB (SQL Server Compact Edition). Сведения об общем механизме извлечения клиентом OLE DB данных об ошибках см. в разделе Microsoft OLE DB документации по пакету разработки ПО с помощью компонентов доступа к данным Microsoft MDAC в библиотеке MSDN.

Примеры

В приведенном примере показан способ извлечения специфических для поставщика номеров ошибок при использовании поставщика OLE DB для SQL Server Compact Edition.

/* This code sample demonstrates a routine that can handle and display errors from the OLE DB provider for SQL Server Compact Edition. The interface returning the error is pIUnknown, and riid is the REFIID of that interface.*/

// QueryInterface for the ISupportErrorInfo interface
hr = pIUnknown->QueryInterface(IID_ISupportErrorInfo,
    (void**)&pISupportErrorInfo);
if(FAILED(hr) || NULL == pISupportErrorInfo)
    return;

// Determine whether the interface even supports errors. If it does,
// ISupportErrorInfo will return S_OK for that interface.
hr = pISupportErrorInfo->InterfaceSupportsErrorInfo(riid);
pISupportErrorInfo->Release(); // release unnecessary interface

if(S_OK == hr)
{
    // This interface supports returning error information.
    // Get the error object from the system for this thread.
    hr = GetErrorInfo(0, &pIErrorInfo);
    if(FAILED(hr) || NULL == pIErrorInfo)
    {
        return;
    }

    hr = pIErrorInfo->QueryInterface(IID_IErrorRecords,
        (void **) &pIErrorRecords);

    pIErrorInfo->Release();  // Release unnecessary interface

    // Determine the number of records in this error object
    hr = pIErrorRecords->GetRecordCount(&ulNumErrorRecs);

    // Loop over each error record in the error object to display 
    // information about each error. Errors are returned. 
    for (dwErrorIndex = 0; dwErrorIndex < ulNumErrorRecs; dwErrorIndex++) 
    {
        // Attempt to retrieve basic error information for this error.
        hr = pIErrorRecords->GetBasicErrorInfo(dwErrorIndex, &ErrorInfo);

        // Retrieve standard error information for this error.
        hr = pIErrorRecords->GetErrorInfo(dwErrorIndex, NULL,
            &pIErrorInfoRecord);

        // Get the description of the error.
        hr = pIErrorInfoRecord->GetDescription(&bstrDescriptionOfError); 

        // Get the source of the error.
        hr = pIErrorInfoRecord->GetSource(&bstrSourceOfError);

        if(NULL != pIErrorInfoRecord)
        {
            pIErrorInfoRecord->Release(); // Release unnecessary interface
        }

        // Print the native error number for this error. Error numbers are
        // are documented in the Troubleshooting section.
        wprintf(L"Native Error Code: %l\n", ErrorInfo.dwMinor);
    }

    pIErrorRecords->Release();  // Release unnecessary interface.
    }
}

См. также

Справочник

Программирование OLE DB для SQL Server Compact Edition

Справка и поддержка

Получение помощи по SQL Server Compact Edition