我们在MFC中可以很方便的对数据库进行操作。例如对SQL Server,我们在MFC的类向导中选择添加新类-->ODBC Consumer,然后选择我们已经在本机上安装的数据库实例并且也在ODBC数据源中添加了新的DSN,然后一路选择下来MFC会自动为我们生产对应的CRecordset类来和数据库中的表对应。
这时的CRecordset类应该是这样,例如,我们选择用户数据源DSN为:RoadNetData,自动生产的为:
CString CPointTable::GetDefaultConnect()
{
return _T("DSN=RoadNetData;Trusted_Connection=Yes;APP=Microsoft\x00ae Visual Studio\x00ae 2010;
WSID=LEIPENG-PC;DATABASE=RoadNetData;QuotedId=No");
}
CString CPointTable::GetDefaultSQL()
{
return _T("[dbo].[PointTable]");
}
现在我们要让程序在其他的电脑上也可以访问此台电脑上的数据库,并进行操作,那么我们需要改的有2个:
1.在Windows防火墙中添加新的入站规则,TCP 1433,即允许监听1433端口,SQL Server的默认端口。
2.修改默认的连接字符串为: return _T("DRIVER={SQL SERVER};SERVER=10.1.100.5;Database=RoadNetData;UID=sa;PWD=123456;");
SERVER为本机的IP地址,在此字符串中不需要指定数据源DSN值。然后写上数据库用户名和密码即可。这样我们就可以远程访问此数据库了。
我们也可以根据给定的参数来连接数据库。
bool CDatabase::Connect(CString server,CString database,CString user,CString pass)
{
CString str = L"DRIVER={SQL SERVER}; SERVER="+ server +";\
Database="+ database +"; uid="+ user +"; pwd="+ pass; //连接字符串,不用设置ODBC源
TRACE("SQLConnection: %s \r\n",str);
try{
BOOL b = db->OpenEx(str,CDatabase::noOdbcDialog); //即使错误,也不打开输入密码对话框
if( b == FALSE )
throw false;
return true;
}catch(bool){
error = L"数据库打开失败";
}catch(CDBException &e){
error = e.m_strError;
}catch(CMemoryException){
error = L"CMemoryException in CDB::Connect";
}catch(...){
error = L"Unknown exception in CDB::Connect";
}
CString err;
err.Format(L"CDB::Connect OpenEx: %d",GetLastError());
OutputDebugString(err + L"\r\n");
return false;
}
这样我们就可以连接任意机器上的SQL Server数据库了。