首先,确保你的项目中包含了必要的头文件和库文件:#include <afxdb.h>,然后链接odbc32.lib。连接SQL Server的代码如下:
CDatabase db;
CString strConnect = _T("ODBC;DRIVER={SQL Server};SERVER=.;DATABASE=Northwind;UID=sa;PWD=;");
if (!db.OpenEx(strConnect, CDatabase::noOdbcDialog)) {
AfxMessageBox(_T("连接失败"));
return;
}
ADO连接SQL数据库完整示例
使用ADO方式连接SQL Server:
#import "msado15.dll" no_namespace rename("EOF", "adoEOF")
_ConnectionPtr pConn(__uuidof(Connection));
CString strConn = _T("Provider=SQLOLEDB;Data Source=.;Initial Catalog=Northwind;User ID=sa;Password=;");
pConn->Open(_bstr_t(strConn));
if (pConn->State == adStateOpen) {
AfxMessageBox(_T("连接成功"));
}
常见错误:无法加载驱动程序
如果出现"指定的驱动程序无法初始化"错误,检查ODBC数据源配置。在控制面板-管理工具-ODBC数据源中添加系统DSN,选择SQL Server驱动,服务器名填.或localhost,认证用SQL Server认证,sa用户和密码。测试连接成功后再用代码连接。
MFC ODBC类库源码解析
CDatabase::OpenEx函数源码关键部分:检查DSN有效性,调用SQLAllocEnv和SQLConnect。常见问题是连接字符串格式错误,如缺少分号或DRIVER名称不对。正确格式:DRIVER={SQL Server Native Client 11.0};SERVER=servername;DATABASE=db;UID=user;PWD=pass。
解决连接超时问题
连接SQL数据库超时,添加连接字符串参数:Connect Timeout=60;Login Timeout=60。完整字符串:"ODBC;DRIVER={SQL Server};SERVER=.;DATABASE=test;UID=sa;PWD=123;Connect Timeout=60;"。同时确保防火墙允许1433端口。
SQL Server配置检查
确保SQL Server允许远程连接:SQL Server配置管理器-网络配置-TCP/IP启用,IP地址-所有IP-TCP端口1433。服务- SQL Server Browser启动。重启服务后测试。
处理中文乱码
连接字符串加Charset=UTF8或用Unicode:DRIVER={SQL Server};SERVER=.;DATABASE=Northwind;UID=sa;PWD=;UseUnicode=1;CharSet=UTF8。查询时用_bstr_t或CStringA转换。
FAQ
Q: VC连接SQL Server提示登录失败?
A: 检查sa密码是否正确,或用Windows认证:Trusted_Connection=yes。
Q: 如何执行SQL语句?
A: CRecordset rs(&db); rs.Open(CRecordset::forwardOnly, _T("SELECT * FROM table"));
Q: 64位系统ODBC问题?
A: 用ODBCAD32.EXE管理64位数据源,确保驱动匹配系统位数。
Q: 连接MySQL怎么改?
A: DRIVER={MySQL ODBC 8.0 Driver};SERVER=localhost;DATABASE=test;UID=root;PWD=pass;PORT=3306;