Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Подключение БД к программе C++ / 22 сообщений из 22, страница 1 из 1
14.02.2016, 11:41
    #39170641
tory.sh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение БД к программе C++
Не получается подключиться к БД без использования сторонних настройщиков. Есть БД, созданная в SQL Server 2012, в качестве компилятора C++ - Code::Blocks - MinGW. Сделала строку подключения в ODBC через "SQL Server Native Client 11.0" (пробовала и через "SQL Server" - результат тот же).
Порт 1433 в конфигурациях SQL Server открыт. Библиотеки \libodbc32.a и \libodbccp32.a в Code::Blocks добавлены.

Код подключения:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
#include <iostream>
#include <windows.h>
#include <sqlext.h>
#include <sqltypes.h>
#include <sql.h>
 
using namespace std;
 
void show_error(unsigned int handletype, const SQLHANDLE& handle){
    SQLCHAR sqlstate[1024];
    SQLCHAR message[1024];
    if(SQL_SUCCESS == SQLGetDiagRec(handletype, handle, 1, sqlstate, NULL, message, 1024, NULL))
        cout<<"Message: "<<message<<"\nSQLSTATE: "<<sqlstate<<endl;
}
 
int main(){
    setlocale(LC_ALL,"Russian");
 
    SQLHANDLE sqlenvhandle;
    SQLHANDLE sqlconnectionhandle;
    SQLHANDLE sqlstatementhandle;
    SQLRETURN retcode;
 
    if(SQL_SUCCESS!=SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &sqlenvhandle))
        goto FINISHED;
 
    if(SQL_SUCCESS!=SQLSetEnvAttr(sqlenvhandle,SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0))
        goto FINISHED;
 
    if(SQL_SUCCESS!=SQLAllocHandle(SQL_HANDLE_DBC, sqlenvhandle, &sqlconnectionhandle))
        goto FINISHED;
 
    SQLCHAR retconstring[1024];
    switch(SQLDriverConnect (sqlconnectionhandle,
                NULL,
                (SQLCHAR*)"DRIVER={SQL Server Native Client 11.0};SERVER=localhost\SQLEXPRESS;DATABASE=MyDB;UID=Admin;PWD=NULL;",
                SQL_NTS,
                retconstring,
                1024,
                NULL,
                SQL_DRIVER_NOPROMPT)){
        case SQL_SUCCESS_WITH_INFO:
            show_error(SQL_HANDLE_DBC, sqlconnectionhandle);
            break;
        case SQL_INVALID_HANDLE:
        case SQL_ERROR:
            show_error(SQL_HANDLE_DBC, sqlconnectionhandle);
            goto FINISHED;
        default:
            break;
    }
 
    if(SQL_SUCCESS!=SQLAllocHandle(SQL_HANDLE_STMT, sqlconnectionhandle, &sqlstatementhandle))
        goto FINISHED;
 
    if(SQL_SUCCESS!=SQLExecDirect(sqlstatementhandle, (SQLCHAR*)"select * from Tab1", SQL_NTS)){
        show_error(SQL_HANDLE_STMT, sqlstatementhandle);
        goto FINISHED;
    }
    else{
        char name[64];
        char address[64];
        int id;
        while(SQLFetch(sqlstatementhandle)==SQL_SUCCESS){
            SQLGetData(sqlstatementhandle, 1, SQL_C_ULONG, &id, 0, NULL);
            SQLGetData(sqlstatementhandle, 2, SQL_C_CHAR, name, 64, NULL);
            SQLGetData(sqlstatementhandle, 3, SQL_C_CHAR, address, 64, NULL);
            cout<<id<<" "<<name<<" "<<address<<endl;
        }
    }
 
FINISHED:
    SQLFreeHandle(SQL_HANDLE_STMT, sqlstatementhandle );
    SQLDisconnect(sqlconnectionhandle);
    SQLFreeHandle(SQL_HANDLE_DBC, sqlconnectionhandle);
    SQLFreeHandle(SQL_HANDLE_ENV, sqlenvhandle);
 
}



В качестве строки подключения использовала ещё:
Код: plaintext
1.
(SQLCHAR*)"DRIVER={SQL Server Native Client 11.0};SERVER=ADMIN-PK\SQLEXPRESS;DATABASE=MyDB;UID=Admin;PWD=NULL;",



В итоге выдает ошибку:
[Microsoft][SQL Server Native Client 11.0]Поставщик именованных каналов: Не удалось открыть соединение с SQL Server [53].

Помогите найти, пожалуйста, в чём же ошибка. Что ни перепробовала, а только номер ошибки изменяется
...
Рейтинг: 0 / 0
14.02.2016, 12:00
    #39170651
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение БД к программе C++
Надо в SQL серверменеджере еще повключать каналы для внешних подключений. Уже не помню точные термины.
...
Рейтинг: 0 / 0
14.02.2016, 12:26
    #39170663
tory.sh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение БД к программе C++
Siemargl,
может что путаю, так все службы запущены и протоколы TCP/IP тоже активны и настроены на 1433 порт. И в Брандмауэр Windows настроены правила для программы и порта.
...
Рейтинг: 0 / 0
14.02.2016, 12:38
    #39170667
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение БД к программе C++
tory.shпротоколы TCP/IP тоже активны
Ну так и подключайся тогда через TCP/IP, а не Named Pipes.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.02.2016, 16:12
    #39170751
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение БД к программе C++
tory.sh,
ты тут через named pipes соединяешся, а вроде как намеревалась через tcp ...

вообще, в driver manager можно все настроить, протестировать и получить строку соединения, Потом ее запихать в программу.
...
Рейтинг: 0 / 0
14.02.2016, 16:19
    #39170755
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение БД к программе C++
в программе нет ошибок, это не программная проблема, а настройки.
если я не ошибаюсь, если native client ,то часть настроек делается в самом клиенте mssql, там, в частности, нужно указать дефолтный протокол tcp. там все должно быть просто, нужно только аккуратно все указать и проверить.

я бы лучше делал без native client, там у него никаких преимуществ нет, но с настройками сложнее.
...
Рейтинг: 0 / 0
14.02.2016, 19:43
    #39170814
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение БД к программе C++
MasterZivя бы лучше делал без native client,
native client - всего навсего пара из ODBC и OLEDB драйверов

в строке соединения можно задать ВСЕ необходимые параметры - https://msdn.microsoft.com/ru-ru/library/ms130822(v=sql.120).aspx
...
Рейтинг: 0 / 0
14.02.2016, 22:41
    #39170907
tory.sh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение БД к программе C++
MasterZiv, Спасибо!
Подключала через ODBC - системный DSN - Server SQL и там в настройках клиента TCP/IP вписывала порт 1433 и там же сделала строку подключения, которая и вставлена в код.

[ODBC]
DRIVER=SQL Server
UID=Admin
Address=ADMIN-PK\SQLEXPRESS,1433
Network=DBMSSOCN
DATABASE=MyDB
WSID=ADMIN-PK
APP=Операционная система Microsoft® Windows®
Trusted_Connection=Yes
SERVER=ADMIN-PK\SQLEXPRESS

Код: plaintext
1.
(SQLCHAR*)"DRIVER={SQL Server};SERVER=ADMIN-PK\\SQLEXPRESS;DATABASE=Spectrum;UID=Admin;PWD=;",



Тогда вылезает ошибка:
[Microsoft][ODBC SQL Server Driver][SQL Server]Ошибка входа пользователя "Admin".


В принципе понимаю, что ошибка не должна быть в коде, а где-то в настройках, только вот ни как её не найду, а советы на других форумах ни к чему не привели
...
Рейтинг: 0 / 0
14.02.2016, 22:57
    #39170912
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение БД к программе C++
tory.shТогда вылезает ошибка:
[Microsoft][ODBC SQL Server Driver][SQL Server]Ошибка входа пользователя "Admin".
А пользователь Admin действительно существует с пустым паролем?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.02.2016, 23:29
    #39170920
tory.sh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение БД к программе C++
Dimitry Sibiryakov,
да, к пользователю Admin пароль не задан, и в таком случае, читала, что поле PWD пустует
...
Рейтинг: 0 / 0
15.02.2016, 01:01
    #39170934
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение БД к программе C++
tory.shDimitry Sibiryakov,
да, к пользователю Admin пароль не задан, и в таком случае, читала, что поле PWD пустует
а если просто через ODBC администратор добавить DSN
и нажать кнопку "Test data Source" ?
...
Рейтинг: 0 / 0
15.02.2016, 02:33
    #39170944
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение БД к программе C++
tory.sh,

trusted connection убери и пользователя и пароль задавай явно.
я не помню точно, но вроде бы trusted connection может быть только на named pipes, а у тебя tcp.

без trusted connection явно будет проще, хотя бы для начала его убери...
...
Рейтинг: 0 / 0
15.02.2016, 06:30
    #39170967
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение БД к программе C++
Скромно спрошу: а почему не использовать ADO? Я им цеплялся ко всему что плохо лежит, mssql, oracle, text :)
...
Рейтинг: 0 / 0
15.02.2016, 10:32
    #39171035
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение БД к программе C++
MasterZivtory.sh,

trusted connection убери и пользователя и пароль задавай явно.
я не помню точно, но вроде бы trusted connection может быть только на named pipes, а у тебя tcp.

без trusted connection явно будет проще, хотя бы для начала его убери...
Не переусложняй, Trusted_Connection - работает со всеми транспортами
...
Рейтинг: 0 / 0
15.02.2016, 10:32
    #39171037
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение БД к программе C++
CEMbСкромно спрошу: а почему не использовать ADO? Я им цеплялся ко всему что плохо лежит, mssql, oracle, text :)
ADO , как ни странно, тоже требует строку соединения
...
Рейтинг: 0 / 0
15.02.2016, 10:44
    #39171045
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение БД к программе C++
ИзопропилMasterZivtory.sh,

trusted connection убери и пользователя и пароль задавай явно.
я не помню точно, но вроде бы trusted connection может быть только на named pipes, а у тебя tcp.

без trusted connection явно будет проще, хотя бы для начала его убери...
Не переусложняй, Trusted_Connection - работает со всеми транспортами

я ж написал, что не помню уже... но все равно его надо особо настраивать в базе.
...
Рейтинг: 0 / 0
15.02.2016, 11:33
    #39171115
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение БД к программе C++
MasterZivИзопропилпропущено...

Не переусложняй, Trusted_Connection - работает со всеми транспортами

я ж написал, что не помню уже... но все равно его надо особо настраивать в базе.
Угу. Трастед конеекшн это через виндовс аутентификейшн.
...
Рейтинг: 0 / 0
15.02.2016, 12:10
    #39171177
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение БД к программе C++
ИзопропилADO , как ни странно, тоже требует строку соединения
Ну да, я в курсе, а как бы я его использовал со всеми перечисленным субд без CS?
ADO не требует всех этих приседаний с настройками ODBC.
...
Рейтинг: 0 / 0
15.02.2016, 13:37
    #39171290
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение БД к программе C++
CEMbИзопропилADO , как ни странно, тоже требует строку соединения
Ну да, я в курсе, а как бы я его использовал со всеми перечисленным субд без CS?
ADO не требует всех этих приседаний с настройками ODBC.
ODBC - не требует никаких приседаний -вся информация может быть задана в строке соединения
о каких приседаниях речь?
...
Рейтинг: 0 / 0
15.02.2016, 14:33
    #39171338
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение БД к программе C++
Изопропил, у ТС вроде как проблемы с настройками, а не с CS.
...
Рейтинг: 0 / 0
15.02.2016, 14:43
    #39171353
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение БД к программе C++
CEMbИзопропил, у ТС вроде как проблемы с настройками, а не с CS.
вот я и советую ему настроить файловый DSN средствами ODBC менеджера, а затем аккуратно скопировать параметры в строку соединения
...
Рейтинг: 0 / 0
15.02.2016, 14:51
    #39171370
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение БД к программе C++
Изопропил, а, всё, теперь понял :)
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Подключение БД к программе C++ / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]