2017-02-02 8 views
0

У меня есть SDI MFC, и я хочу использовать CDatabase для подключения к удаленному SQL-серверу.MFC подключиться к серверу sql с ODBC

Я создал соединение ODBC на своем компьютере, а DSN - «TodoTest».

Вот мой код.

CDatabase db; 
CString connStr = _T("DSN=TodoTest;"); 
if (!db.OpenEx(connStr, CDatabase::openReadOnly)) 
{ 
    // Failed to connect to database. 
    return; 
} 
CRecordset rs(&db); 
...... 

Вопрос заключается в том, что, кажется OpenEx() было приостановлено навсегда, потому что я не вижу никакого возвращаемого значения этого, и код никогда не работает на последующих строках.

Программа заморожена.

Должен ли я включать любую другую информацию в строку соединения?

Спасибо.

+0

Как долго вы можете ждать? Достаточно, чтобы запустить таймаут? Также обратите внимание, что ваша строка подключения неполна. Отсутствует информация о пользователе и пароле. Просмотрите документацию для образца: https://msdn.microsoft.com/en-us/library/2dhc1abk.aspx#cdatabase__openex – erg

+0

@erg Пользователь и пароль не нужны, вы вводите их в диалог подключения ODBC. Вам необходимо вставить их, когда вы используете опцию 'CDatabase :: noOdbcDialog'. – kajojeq

+0

Это выглядит хорошо, попробуйте отлаживать глубже, когда я специально вставлял неправильное имя ODBC, это бросало меня на искушение. Попытайтесь проверить, где именно он держится. Предоставление неправильного имени ODBC происходит следующим образом: 'CDatabase :: OpenEx -> CDatabase :: Connect -> CDatabase :: ThrowDBException' – kajojeq

ответ

0

Хорошо, спасибо всем!

Наконец-то получите смысл!

Похоже, что мое приложение не принимает 64-битный драйвер ODBC, поэтому я перехожу к %systemdrive%\Windows\SysWoW64, чтобы найти 32-разрядный менеджер ODBC.

Затем я создаю 32-разрядный источник ODBC и хорошо работает!

+0

Благодаря kajojeq, я пробовал глубже отлаживать и обнаружил, что это связано с чем-то вроде драйвера ODBC. Вы дали мне вдохновение. – Eddy

Смежные вопросы