Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Базы данных > Подключение к MSSQL на C++


Автор: kefir01 11.11.2007, 14:27
Не подскажете как в C++ выполняется подключение к MSSQL и счтение данных. Желательно пример, но благодарен буду также и ссылке на мануал.

Автор: jonie 11.11.2007, 17:56
хм...
Код

// где-то в stdafx,h
#include <atlbase.h>
#include <atlcom.h>

#import "C:\Program Files\Common Files\System\ado\msado27.tlb" rename("EOF", "adoEOF"), named_guids //, no_namespace

//где-то в коде
using namespace ADODB;
    _ConnectionPtr Conn;
    Conn.CreateInstance(__uuidof(Connection));
    Conn->CursorLocation = adUseClient;
    bstr_t ConnString (_T("File Name="));
    ConnString += GetModulePath();
    ConnString += "\\myconnect.udl"; // open DMT DB
    Conn->Open(ConnString, _bstr_t(), _bstr_t(), adConnectUnspecified);    

    _CommandPtr spCommand;
    spCommand.CreateInstance(CLSID_Command);
    spCommand->CommandType = adCmdText;
    spCommand->ActiveConnection = Conn;

    std::string clean_cmd  = "DELETE FROM tab";
    spCommand->CommandText = clean_cmd.c_str();
    spCommand->Execute(NULL, NULL, 0);

Conn->Close();

только файл создать udl  ....
ну и вообще гугл что-нибудь по выщеприведенным функциям точно даст 8)

Автор: jonie 11.11.2007, 18:15
на может поможет накатал примерчик простенький...
в папке debug запусти файлик перед "посмотреть" (там выставишь параметры коннекта в БД).
ну или впиши руками коннекшен стринг...

Автор: kefir01 11.11.2007, 23:12
Огромное спасибо. Сейчас буду пробовать.

Автор: kefir01 11.11.2007, 23:36
Попробовал. Если честно мало понятно в чем суть. Я просто с тока начал С осваивать - не во все въезжаю. 
Изменил myconnect.udl

Также исправил кусок "по вкусу"
Код

        std::string clean_cmd  = "SELECT FROM TestTable"; //Есть таблица с данными
        spCommand->CommandText = clean_cmd.c_str();
        spCommand->Execute(NULL, NULL, 0);


Получил результат:
Код

Error: 80030003 002B5C6C


Мой вопрос - оно подключилось или нет? И как реализовать аналог $data = $sth->fetchrow_hashref (perl) на C++

Автор: mrbrooks 12.11.2007, 09:01
Ну если SQL он и в африке SQL то вместо:

Код

 std::string clean_cmd  = "SELECT FROM TestTable";


я бы написал так

Код

 std::string clean_cmd  = "SELECT * FROM TestTable";


где * - значит все поля из таблицы TestTable.

Автор: kefir01 12.11.2007, 13:09
mrbrooks, я это потом заметил ;)
Вопрос-то не суть в этом. Я в коде не нашел сточки вывода результатов запроса.

Автор: jonie 12.11.2007, 22:27
а результат там и не выводится..
Код

variant_t v;
.....
rs = spCommand->Execute(NULL, NULL, 0);
while(!rs->adoEOF)
{
for(i=0; i<rs->Fields->Count; i++)
{
  v = rs->Fields->Item[i]->Value;
  wstring FieldName ( rs->Fields->Item[i]->Name );
  bstr_t  FieldValue = bstr_t(v); 
}
rs->MoveNext();
}
Conn->Close();
....
в общем ищи про ADO (тот же материал по VB пойдет).

Автор: kefir01 13.11.2007, 13:25
jonie, спасибо, буду разбираться дальше сам.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)