Я поддерживаю унаследованную кодовую базу и мне нужно написать небольшое консольное приложение на Visual C ++ 6, которое обращается к базе данных SQL Server через ADODB. Я опытный разработчик C / C ++, но я не проводил много времени с MS C ++, который, насколько я могу судить, совершенно отличается от g ++ и полон нестандартных языковых расширений.
Всякий раз, когда я пытаюсь следовать учебному пособию в Интернете, я получаю миллионы ошибок. Он не распознает целую кучу идентификаторов (например, CComPtr, HRESULT, _RecordsetPtr и т. Д.), И я почти уверен, что проблема в том, что я каким-то образом неправильно настроил свой проект. Я попробовал в основном все консольные приложения AppWizard, и ни один из них не помог мне найти демонстрационный код.
Может кто-нибудь объяснить мне, как я настраиваю приложение Visual C ++ 6, которое может, например, делать подсчет (*) из таблицы БД? Я думаю, что моя проблема как-то связана с неправильным включением различных ATL или любых других библиотек, от которых зависит ADODB ... Я понял, как #import msado15.dll, но все еще не играю в кости.
Пожалуйста, помогите !!! Заранее спасибо,
Jason
ОБНОВЛЕНИЕ: теперь получил его для компиляции, но при попытке открыть соединение ADO я получаю «Ошибка отладки». Это происходит из строки 474 atlbase.h и утверждение "p! = 0".
ОБНОВЛЕНИЕ 2: Вот мой код
#import "C:\Program Files\Common Files\System\ADO\msdo15.tlb" no_namespace rename("EOF","A_EOF")
#include "stdafx.h"
#include <objbase.h>
#include <initguid.h>
#include <comdef.h>
#include <atlbase.h>
#include <adoid.h>
#include <adoint.h>
int main (int argc, char * argv [])
{
HRESULT hr;
CComPtr<ADORecordset> m_pSet;
CComPtr<ADOConnection> m_pConn;
char ret[128];
CComBSTR connstr = (CComBSTR) "driver=SQL Server;server=SQL1;uid=ffffddddd;pwd=aaaasss;database=MyDB";
CoCreateInstance(CLSID_CADOConnection, NULL, CLSCTX_INPROC_SERVER, IID_IADOConnection, (LPVOID *) &m_pConn);
CoCreateInstance(CLSID_CADORecordset, NULL, CLSCTX_INPROC_SERVER, IID_IADORecordset, (LPVOID *) &m_pSet);
printf("Here %d!\n", (int) &m_pConn);
m_pConn->Open(connstr, (CComBSTR) "", (CComBSTR) "", adOpenUnspecified);
//m_pConn->ConnectionString = connstr;
//m_pConn->Open("","","",NULL);
printf("Here!\n");
m_pSet->Open(CComVariant((CComBSTR) "SELECT COUNT(*) AS Cnt FROM VARIANCESWAP_INDIC"), CComVariant(m_pConn), adOpenKeyset, adLockOptimistic, adCmdText);
CComPtr<ADOFields> pFields = NULL;
m_pSet->get_Fields(&pFields);
CComPtr<ADOField> cnt = NULL;
pFields->get_Item(CComVariant(0), &cnt);
CComVariant dbValue;
cnt->get_Value(&dbValue);
sprintf(ret, "%S", dbValue.bstrVal);
if(m_pSet != NULL) m_pSet->Close();
if(m_pConn != NULL) m_pConn->Close();
printf("Hello World!\n");
return 0;
}