MFC使用ODBC连接数据库

       我们在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数据库了。

        


你可能感兴趣的:(MFC)