2017-02-02 21 views
0

我有一個SDI MFC,我想使用CDatabase連接到遠程SQL服務器。MFC使用ODBC連接到SQL服務器

我在我的電腦中創建了一個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