-
October 5th, 2012, 02:58 AM
#1
[RESOLVED] ADO compatibility
Hi gurus.
I’m having a trouble with ADO. I have this code (below), it works fine in a developer machine (Windows 7 and Visual studio 10) but compiled program not works under Windows Server 2003 SP 2.
the cpp file:
Code:
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
#import <C:\\Program Files\\Common Files\\System\\ado\\msado15.dll> no_namespace rename("EOF", "adoEOF")
_ConnectionPtr bdConnect;
bool OpenBD(string szConexion, int nTimeOut_);
int _tmain(int argc, _TCHAR* argv[])
{
string sConnection = "driver={sql server};SERVER=myserver;Database=mydb;UID=myuser;PWD=mypass";
bool bRes = true;
try {
bRes = OpenBD(sConnection, 10);
} catch (string sError) {
cout << sError << endl;
}
Sleep(5000);
return 0;
}
bool OpenBD(string sConexion, int nTimeOut_) {
FILE *pf = fopen("Test.txt", "wt");
DWORD dIniCount = GetTickCount();
string sConexionRes;
char sAux[100];
bool bError = false;
HRESULT _hr = S_OK;
try {
::CoInitialize(NULL);
fprintf(pf, "Enter\n");
fflush(pf);
CLSID IID;
IID = __uuidof(Connection);
LPOLESTR sIID;
StringFromCLSID(IID, &sIID);
char sNombre[1000];
WideCharToMultiByte(CP_ACP, 0, sIID, wcslen(sIID), sNombre, sizeof(char) * wcslen(sIID), NULL, NULL);
sNombre[wcslen(sIID)] = '\0';
fprintf(pf, "CLSID: %s\n", sNombre);
fflush(pf);
_hr = bdConnect.CreateInstance(__uuidof(Connection));
if(_hr == S_OK) {
fprintf(pf, "S_OK\n");
fflush(pf);
} else if(_hr == S_FALSE) {
fprintf(pf, "S_FALSE\n");
fflush(pf);
} else if(_hr == RPC_E_CHANGED_MODE) {
fprintf(pf, "RPC_E_CHANGED_MODE\n");
fflush(pf);
} else {
fprintf(pf, "UNKNOWN: %d\n", _hr);
fflush(pf);
}
fprintf(pf, "After CreateInstance\n");
fflush(pf);
if (FAILED(_hr)) _com_issue_error(_hr);
fprintf(pf, "After: _com_issue_error(_hr);\n");
fflush(pf);
} catch(_com_error &e) {
DWORD dCountError = GetTickCount();
sConexionRes = sConexion;
sConexionRes += "\nConnection error description:\n";
BSTR sComError;
IErrorInfo *pErrorInfo = e.ErrorInfo();
pErrorInfo->GetDescription(&sComError);
_bstr_t bstr_t(sComError);
string strError(bstr_t);
sConexionRes += strError;
sprintf(sAux, "\nHRESULT value: %x", _hr);
sConexionRes += sAux;
sprintf(sAux, "\nConnection timeout is defined to %d seconds\n",nTimeOut_);
sConexionRes += sAux;
sprintf(sAux, "Elapsed time: %d milliseconds\n", dCountError - dIniCount);
sConexionRes += sAux;
throw sConexionRes;
}
DWORD dConnect = GetTickCount();
sConexionRes = sConexion;
sprintf(sAux, "\nConnection established. Elapsed time: %d milliseconds\n", dConnect - dIniCount);
sConexionRes += sAux;
cout << sConexionRes << endl;
fclose(pf);
return TRUE;
}
Test.txt in the Windows 2003 Server SP 2 is like:
Code:
Enter
CLSID: {00000514-0000-0010-8000-00AA006D2EA4}
UNKNOWN: -2147467262
After CreateInstance
In the registry (Windows 2003 Server SP 2) the key {00000514-0000-0010-8000-00AA006D2EA4} is HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ADODB.Connection that it's the same in the developer machine.
-2147467262 value for HRESULT is: interface is not compatible.
Someone have some idea?
Thanks in advance!!
-
October 5th, 2012, 03:24 AM
#2
Re: ADO compatibility
Victor Nijegorodov
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|