ODBC 依賴機器層級的 DSN(資料來源名稱),將 MFC ODBC 專案部署到無 DSN 的客戶機器會導致連線失敗。手工建立 DSN 不利於大規模分發。
_ConnectionPtr、_RecordsetPtr 智慧指標(#import "msado15.dll")。HKLM\SOFTWARE\ODBC\ODBC.INI\<DSN_Name>// C++ 程式碼片段:安裝時呼叫
BOOL CreateSystemDSN(LPCTSTR dsnName, LPCTSTR driver, LPCTSTR server, LPCTSTR db) {
return SQLConfigDataSource(NULL, ODBC_ADD_SYS_DSN, driver,
CString("DSN=") + dsnName + "\0"
"SERVER=" + server + "\0"
"DATABASE=" + db + "\0"
"Trusted_Connection=Yes\0\0");
}
CString connStr = "Driver={SQL Server};Server=192.168.1.100;Database=MyDB;Uid=sa;Pwd=123456;";
db.OpenEx(connStr, CDatabase::noOdbcDialog);
| 方案 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| ADO | 現代、無 DSN、功能豐富 | 需 COM 初始化、學習曲線 | 新專案、長期維護 |
| 安裝程式建 DSN | 零代碼修改、傳統相容 | 需安裝工具授權、權限問題 | 既有大型 ODBC 專案 |
| DSN-less 字串 | 最簡單、單檔部署 | 驅動版本不一致易出錯 | 內部工具、測試環境 |