C ++ импорт и использование ADO - PullRequest
5 голосов
/ 01 июля 2011

У меня есть два коротких вопроса, касающихся импорта и использования ADO в проекте C ++. У меня нет опыта работы с ADO в любой форме.

Во-первых, на данный момент аспект моей программы, связанный с базой данных, нужно запускать только в Windows. Достаточно ли проверить, определены ли _WIN32 или _WIN64 перед запуском специального кода ADO, или есть лучшие подходы? Я использую Visual C ++ 2010 Express в качестве моего компилятора.

Во-вторых, я следую за этой страницей как за моим гидом. Я включил оператор #import для msado15.dll. Директива #import подчеркнута красным, а ошибка, возникающая при наведении на нее курсора, говорит: «... не удается открыть путь к исходному файлу / в / msado15.tlh», а все элементы ADO, которые я копирую в источник, остаются подчеркнутыми красным. Я проверил каталог, указанный в сообщении об ошибке, и msado15.tlh там, если это имеет значение. Кроме того, программа компилируется (она аварийно завершает работу после выполнения, но это еще кое-что, что я буду диагностировать отдельно).

Я не знаю, почему это происходит. Буду признателен за любую помощь или совет.

Ответы [ 2 ]

10 голосов
/ 01 июля 2011

Как мы это делаем, мы добавляем следующее в наши каталоги VC ++ / Включаемые файлы

$(ProgramFiles)\Common Files\System\ado

И затем импортируем как

в заголовок:

#import "msado15.dll" rename_namespace("ADO") rename("EOF", "EndOfFile") no_implementation

В верхней части файла cpp

#import "msado15.dll" rename_namespace("ADO") rename("EOF", "EndOfFile") implementation_only

Немного по-другому, поскольку мы предпочитаем сохранять пространство имен и использовать другое переименование EOF.

Импорт C ++справка по MSDN

C ++ Атрибуты импорта на MSDN

2 голосов
/ 02 июля 2011

У меня была такая же проблема, когда я начал с ADO. (подчеркнуто красным, не могу найти ...) Это сводило меня с ума, но после простой компиляции подчеркивание исчезло, и все работало нормально.

я использую #import "C:\Program\Delade filer\System\ado\msado15.dll" rename_namespace("USEADO"),rename("EOF","EndOfFile") в моем заголовке.

В кпп, например:

#include "stdafx.h"

int SQLsetInfo(THING *Thing, GADGET *Gadget)
{

HRESULT hr;                                                         
USEADO::_ConnectionPtr connection;                                  
USEADO::_RecordsetPtr recordset;                                    

 //Initialize COM  
    if(FAILED(hr = CoInitialize(NULL)))                         
    {   MessageBox( NULL, L"Initialize COM Failed", L"MyProg!",MB_ICONEXCLAMATION |MB_OK);
        //Do something, eg shut down DB stuff and continue without or exit program
        //Insert error handeler below
        return hr;//TODO Ad error handeling see line 149
    }   

if(FAILED(hr = connection.CreateInstance(__uuidof(USEADO::Connection))))
    {   MessageBox( NULL, L"Create connection instance Failed", L"MyProg!",MB_ICONEXCLAMATION |MB_OK);
        //Do something, eg shut down DB stuff and continue without or exit program
        return hr;
    }

if(FAILED(hr = recordset.CreateInstance(__uuidof(USEADO::Recordset))))
    {   MessageBox( NULL, L"Create recordset instance Failed", L"MyProg!",MB_ICONEXCLAMATION |MB_OK);
        //Do something, eg shut down DB stuff and continue without or exit program 
        return hr;
    }

    connection->CursorLocation = USEADO::adUseServer; //http://dev.mysql.com/tech-resources/articles/vb-cursors-and-locks.html                                           

    //Try to connect to SQL server
    try         { connection->Open(L"YOUR CONNECTION STRING", USEADO::adConnectUnspecified);    }
    catch(...)  {std::cout << "!!! connection->Open(ConnectionString   FAILED !!!" << std::endl;        }

Я не эксперт в C ++, но это прекрасно работает для меня. Надеюсь, это поможет вам. Если у кого-то еще есть предложения / критика к приведенному выше фрагменту, я с нетерпением жду этого ...

...