Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подключение к MSSQL на C++ 
V
    Опции темы
kefir01
Дата 11.11.2007, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 22.6.2007

Репутация: нет
Всего: 2



Не подскажете как в C++ выполняется подключение к MSSQL и счтение данных. Желательно пример, но благодарен буду также и ссылке на мануал.
PM MAIL   Вверх
jonie
Дата 11.11.2007, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 4
Всего: 118



хм...
Код

// где-то в 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)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
jonie
Дата 11.11.2007, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 4
Всего: 118



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

Присоединённый файл ( Кол-во скачиваний: 108 )
Присоединённый файл  ADOtest.7z 2,82 Kb


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
kefir01
Дата 11.11.2007, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 22.6.2007

Репутация: нет
Всего: 2



Огромное спасибо. Сейчас буду пробовать.
PM MAIL   Вверх
kefir01
Дата 11.11.2007, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 22.6.2007

Репутация: нет
Всего: 2



Попробовал. Если честно мало понятно в чем суть. Я просто с тока начал С осваивать - не во все въезжаю. 
Изменил 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++
PM MAIL   Вверх
mrbrooks
Дата 12.11.2007, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 7
Всего: 306



Ну если SQL он и в африке SQL то вместо:

Код

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


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

Код

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


где * - значит все поля из таблицы TestTable.
PM MAIL   Вверх
kefir01
Дата 12.11.2007, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 22.6.2007

Репутация: нет
Всего: 2



mrbrooks, я это потом заметил ;)
Вопрос-то не суть в этом. Я в коде не нашел сточки вывода результатов запроса.
PM MAIL   Вверх
jonie
Дата 12.11.2007, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 4
Всего: 118



а результат там и не выводится..
Код

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 пойдет).


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
kefir01
Дата 13.11.2007, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 22.6.2007

Репутация: нет
Всего: 2



jonie, спасибо, буду разбираться дальше сам.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »


 




[ Время генерации скрипта: 0.0772 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.