Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Per le applicazioni sviluppate tramite Microsoft Visual C++, è possibile ottenere informazioni sugli errori dal runtime dell'applicazione, dal provider di dati oppure utilizzando le raccolte e gli oggetti di controllo errori ActiveX di Microsoft SQL Server Compact 4.0. L'utilizzo di raccolte e oggetti di controllo errori di SQL Server Compact consente di gestire gli errori degli oggetti Engine.
Recupero di informazioni sugli errori
Le applicazioni create con Microsoft Visual C++ possono ricevere da SQL Server Compact informazioni molto più dettagliate rispetto a HRESULT. La modalità di recupero di queste informazioni estese sugli errori dipende da quale dei metodi descritti di seguito viene utilizzato dall'applicazione per l'interazione con SQL Server Compact.
Oggetti errore OLE DB
Il provider OLE DB per SQL Server Compact restituisce un set esteso di oggetti errore accessibile mediante oggetti errore OLE DB. Gli oggetti errore OLE DB contengono più livelli di errori e forniscono informazioni aggiuntive rispetto agli errori standard. Per ulteriori informazioni, vedere Utilizzo degli oggetti errore OLE DB (SQL Server Compact).
Oggetti e raccolte di controllo degli errori di SQL Server Compact
Gli oggetti Engine offrono parametri e raccolte di errori accessibili tramite Visual C++. Questi programmi nativi fanno riferimento a oggetti errore e raccolte di errori di SQL Server aggiungendo sqlce_sync.h ai riferimenti di progetto e facendo riferimento a questi file mediante la direttiva include. Per ulteriori informazioni, vedere Programmazione dell'oggetto errore nativo (SQL Server Compact).
Utilizzo di raccolte e oggetti per il controllo degli errori nativi
La raccolta SSCEErrors contiene un oggetto SSCEError per ogni errore generato. In ogni oggetto SSCEError è presente una raccolta SSCEParams. La descrizione degli errori può essere recuperata dagli oggetti SSCEParam della raccolta SSCEParams. Diversamente da SQL Server, SQL Server Compact restituisce informazioni dettagliate su un errore come raccolta di sei parametri. Quando si compilano messaggi di errore, utilizzare una serie di cicli FOR nidificati, in modo da recuperare tutti gli oggetti SSCEParam presenti nella raccolta SSCEParams per ogni oggetto SSCEError.
Esempi
Nell'esempio seguente viene illustrato come visualizzare gli errori degli oggetti Engine utilizzando Visual C++.
// Error handling example
#include "sqlce_sync.h"
void ShowErrors(ISSCEErrors* pISSCEErrors)
{
HRESULT hr;
LONG cbBuf;
LONG i;
LONG lErrorCount;
LONG lErrorIndex;
LONG lParamCount;
LONG lParamIndex;
VARIANT var;
VARIANT varParam;
WCHAR wszBuff[4096];
WCHAR* pwszBuffPos = &wszBuff[0];
BSTR bstr;
ISSCEError* pISSCEError = NULL;
ISSCEParams* pISSCEParams = NULL;
ISSCEParam* pISSCEParam = NULL;
BOOL fSuccess = FALSE;
// Initialize the variants.
VariantInit(&var);
VariantInit(&varParam);
// Get the count of errors.
if(FAILED(hr = pISSCEErrors->get_Count(&lErrorCount))) goto Exit;
if (lErrorCount <= 0)
{
MessageBox(NULL, L"No extended error information.",L"ShowErrors", MB_OK);
fSuccess = TRUE;
goto Exit;
}
// Display errors, one at a time, in a single message box.
// If there are too many errors, they might not all display correctly.
// If so, we recommend that you perform logic based on the number of errors.
for (lErrorIndex = 0; lErrorIndex < lErrorCount; lErrorIndex++)
{
cbBuf = swprintf(pwszBuffPos, L"E R R O R %d of %d\r\n",
lErrorIndex+1, lErrorCount);
pwszBuffPos += cbBuf;
// Get the next error record.
var.vt = VT_I4;
var.lVal = lErrorIndex;
if(FAILED(hr = pISSCEErrors->get_Item(var, &pISSCEError))) goto Exit;
// Error description
if (FAILED(hr = pISSCEError->get_Description(&bstr))) goto Exit;
cbBuf = swprintf(pwszBuffPos, L"DESCRIPTION: '%s'\r\n", bstr);
pwszBuffPos += cbBuf;
SysFreeString(bstr);
// Error number
if (FAILED(hr = pISSCEError->get_Number(&i))) goto Exit;
cbBuf = swprintf(pwszBuffPos, L"NUMBER: %8.8X\r\n", i);
pwszBuffPos += cbBuf;
// Native error
if (FAILED(hr = pISSCEError->get_NativeError(&i))) goto Exit;
cbBuf = swprintf(pwszBuffPos, L"NATIVE_ERROR: %d\r\n", i);
pwszBuffPos += cbBuf;
// Error source
if (FAILED(hr = pISSCEError->get_Source(&bstr))) goto Exit;
cbBuf = swprintf(pwszBuffPos, L"SOURCE: '%s'\r\n", bstr);
pwszBuffPos += cbBuf;
SysFreeString(bstr);
// Retrieve the error parameters.
if (FAILED(hr = pISSCEError->get_Params(&pISSCEParams))) goto Exit;
// Get the number of error parameters.
if (FAILED(hr = pISSCEParams->get_Count(&lParamCount))) goto Exit;
// Display the value of each parameter.
for (lParamIndex = 0; lParamIndex < lParamCount; lParamIndex++)
{
// Get the parameter object.
var.vt = VT_I4;
var.lVal = lParamIndex;
if (FAILED(hr = pISSCEParams->get_Item(var, &pISSCEParam))) goto Exit;
// Get and display the parameter value.
if (FAILED(hr = pISSCEParam->get_Param(&varParam))) goto Exit;
if (VT_I4 == varParam.vt || VT_UI4 == varParam.vt)
{
cbBuf = swprintf(pwszBuffPos, L"P%d: %d\r\n", lParamIndex,
(LONG) varParam.lVal);
}
else if (VT_I2 == varParam.vt || VT_UI2 == varParam.vt)
{
cbBuf = swprintf(pwszBuffPos, L"P%d: %d\r\n", lParamIndex,
(LONG) varParam.iVal);
}
else if (VT_BSTR == varParam.vt)
{
cbBuf = swprintf(pwszBuffPos, L"P%d: '%s'\r\n", lParamIndex,
varParam.bstrVal);
}
pwszBuffPos += cbBuf;
// Clear the variant.
VariantClear(&varParam);
// Release the parameter object.
pISSCEParam->Release();
pISSCEParam = NULL;
}
cbBuf = swprintf(pwszBuffPos, L"\r\n");
pwszBuffPos += cbBuf;
}
// Display the error information.
MessageBox(NULL, wszBuff,L"Error", MB_OK);
fSuccess = TRUE;
Exit:
// Release the parameter object.
if (pISSCEParam)
{
pISSCEParam->Release();
pISSCEParam = NULL;
}
// Release the parameters object.
if (pISSCEParams)
{
pISSCEParams->Release();
pISSCEParams = NULL;
}
// Release the error object.
if (pISSCEError)
{
pISSCEError->Release();
pISSCEError = NULL;
}
// The Errors object is released in calling routine.
if (!fSuccess)
{
MessageBox(NULL, L"Error while processing errors!",L"ShowErrors", MB_OK);
}
return;
}
Vedere anche
Altre risorse
Programmazione dell'oggetto errore nativo (SQL Server Compact)