Exemplo da propriedade InternetTimeout (VC++)
Importante
A partir do Windows 8 e do Windows Server 2012, os componentes do servidor RDS não estão mais incluídos no sistema operacional Windows (confira Windows 8 e Manual de Compatibilidade do Windows Server 2012 para obter mais detalhes). Os componentes do cliente RDS serão removidos em uma versão futura do Windows. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. Os aplicativos que usam o RDS devem migrar para o Serviço de Dados do WCF.
Este exemplo demonstra a propriedade InternetTimeout, que existe nos objetos DataControl e DataSpace. Nesse caso, a propriedade InternetTimeout é demonstrada no objeto DataControl e o tempo limite é definido como 20 segundos.
// BeginInternetTimeoutCpp
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")
#import "C:\Program Files\Common Files\System\MSADC\msadco.dll"
#include <ole2.h>
#include <stdio.h>
#include <conio.h>
// Function declarations
inline void TESTHR(HRESULT x) {if FAILED(x) _com_issue_error(x);};
void InternetTimeOutX(void);
void PrintProviderError(_ConnectionPtr pConnection);
void PrintComError(_com_error &e);
//////////////////////////////////////////////////////////
// //
// Main Function //
// //
//////////////////////////////////////////////////////////
void main()
{
if(FAILED(::CoInitialize(NULL)))
return;
InternetTimeOutX();
::CoUninitialize();
}
//////////////////////////////////////////////////////////
// //
// InternetTimeOutX Function //
// //
//////////////////////////////////////////////////////////
void InternetTimeOutX(void)
{
HRESULT hr = S_OK;
// Define ADO object pointers.
// Initialize pointers on define.
// These are in the ADODB:: namespace.
_RecordsetPtr pRst = NULL;
//Define RDS object pointers
RDS::IBindMgrPtr dc ;
try
{
TESTHR(dc.CreateInstance(__uuidof(RDS::DataControl)));
dc->Server = "https://MyServer";
dc->Connect = "Data Source='AuthorDatabase'";
dc->SQL = "SELECT * FROM Authors";
// Wait at least 20 seconds.
dc->InternetTimeout = 20000;
dc->Refresh();
// Use another Recordset as a convenience
pRst = dc->GetRecordset();
while(!(pRst->EndOfFile))
{
printf("%s %s",(LPSTR) (_bstr_t) pRst->Fields->
GetItem("au_fname")->Value,
(LPSTR) (_bstr_t) pRst->Fields->
GetItem("au_lname")->Value);
pRst->MoveNext();
}
pRst->Close();
}
catch (_com_error &e)
{
PrintProviderError(pRst->GetActiveConnection());
PrintComError(e);
}
}
//////////////////////////////////////////////////////////
// //
// PrintProviderError Function //
// //
//////////////////////////////////////////////////////////
void PrintProviderError(_ConnectionPtr pConnection)
{
// Print Provider Errors from Connection object.
// pErr is a record object in the Connection's Error collection.
ErrorPtr pErr = NULL;
if( (pConnection->Errors->Count) > 0)
{
long nCount = pConnection->Errors->Count;
// Collection ranges from 0 to nCount -1.
for(long i = 0; i < nCount; i++)
{
pErr = pConnection->Errors->GetItem(i);
printf("\t Error number: %x\t%s", pErr->Number,
pErr->Description);
}
}
}
//////////////////////////////////////////////////////////
// //
// PrintComError Function //
// //
//////////////////////////////////////////////////////////
void PrintComError(_com_error &e)
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
// Print Com errors.
printf("Error\n");
printf("\tCode = %08lx\n", e.Error());
printf("\tCode meaning = %s\n", e.ErrorMessage());
printf("\tSource = %s\n", (LPCSTR) bstrSource);
printf("\tDescription = %s\n", (LPCSTR) bstrDescription);
}
// EndInternetTimeoutCpp