首先,MFC通过ODBC访问数据库,主要使用两个类,一个是CDataBase,一个是CRecordset。第一个是用于建立数据库连接的,第二个是数据集,用来查询的。步骤如下:
1.实例化一个CDataBase对象,并建立连接
CDataBase database;
database.OpenEx( _T( "DSN=odbclink" ),CDatabase::noOdbcDialog);//odbclink为数据源名称
//判断一下是否正确打开
if(!database.IsOpen())
{
    _tprintf(_T"打开失败");
}
2.从CRecordset继承一个类
MFC odbc访问远程数据库class myRecorderSet : public CRecordset
MFC odbc访问远程数据库MFC odbc访问远程数据库
...{
MFC odbc访问远程数据库
public:
MFC odbc访问远程数据库    myRecorderSet(CDatabase
*   pDatabase   =   NULL,CString   sSQlstatment = "DNS = test1",int nParam=2);
MFC odbc访问远程数据库MFC odbc访问远程数据库    
~myRecorderSet()...{};
MFC odbc访问远程数据库    
void   Move(   long   nrows,   WORD   wfetchtype   );   
MFC odbc访问远程数据库    
void SetInputParam(CString sUserID);
MFC odbc访问远程数据库    DECLARE_DYNAMIC(myRecorderSet)
MFC odbc访问远程数据库
MFC odbc访问远程数据库    
int   m_retreturn_value;  
MFC odbc访问远程数据库    CString   m_UserID;  
MFC odbc访问远程数据库    CString   m_UserName;  
MFC odbc访问远程数据库    CString   m_SqlStatment;
MFC odbc访问远程数据库
MFC odbc访问远程数据库
public:  
MFC odbc访问远程数据库    
virtual   CString   GetDefaultConnect();         //   Default   connection   string  
MFC odbc访问远程数据库
    virtual   CString   GetDefaultSQL();         //   Default   SQL   for   Recordset  
MFC odbc访问远程数据库
    virtual   void   DoFieldExchange(CFieldExchange*   pFX);     //   RFX   support  
MFC odbc访问远程数据库

MFC odbc访问远程数据库#ifdef   _DEBUG  
MFC odbc访问远程数据库    
virtual   void   AssertValid()   const;  
MFC odbc访问远程数据库    
virtual   void   Dump(CDumpContext&   dc)   const;  
MFC odbc访问远程数据库
#endif 
MFC odbc访问远程数据库}
;
MFC odbc访问远程数据库
void AFXAPI RFX_Textout(CFieldExchange * pfx, LPCTSTR szname, 
MFC odbc访问远程数据库                            CString
& value, int nmaxlength, int ncolumntype, short nscale);  
MFC odbc访问远程数据库IMPLEMENT_DYNAMIC(myRecorderSet,CRecordset)  
MFC odbc访问远程数据库
MFC odbc访问远程数据库myRecorderSet::myRecorderSet(CDatabase
* pdb,CString Sqlstatment,int nParam):CRecordset(pdb)  
MFC odbc访问远程数据库MFC odbc访问远程数据库
...{  
MFC odbc访问远程数据库    m_UserID
="";  
MFC odbc访问远程数据库    m_UserName
="";  
MFC odbc访问远程数据库    m_nDefaultType 
= snapshot;  
MFC odbc访问远程数据库    m_SqlStatment 
= Sqlstatment;
MFC odbc访问远程数据库    m_nParams
=nParam;
MFC odbc访问远程数据库}

MFC odbc访问远程数据库
MFC odbc访问远程数据库CString myRecorderSet::GetDefaultConnect()  
MFC odbc访问远程数据库MFC odbc访问远程数据库
...{  
MFC odbc访问远程数据库    
return _T(m_SqlStatment);
MFC odbc访问远程数据库}
  
MFC odbc访问远程数据库
MFC odbc访问远程数据库CString myRecorderSet::GetDefaultSQL()  
MFC odbc访问远程数据库MFC odbc访问远程数据库
...{  
MFC odbc访问远程数据库    
return _T("");
MFC odbc访问远程数据库}
  
MFC odbc访问远程数据库
MFC odbc访问远程数据库
void myRecorderSet::DoFieldExchange(CFieldExchange* pFX)  
MFC odbc访问远程数据库MFC odbc访问远程数据库
...{  
MFC odbc访问远程数据库    pFX
->SetFieldType(CFieldExchange ::outputParam);        //set the field type to outputParam for the return value 
MFC odbc访问远程数据库
    RFX_Int(pFX, _T("@RETURN_VALUE"), m_retreturn_value);    //bind the return value to the variable 
MFC odbc访问远程数据库
    pFX->SetFieldType(CFieldExchange ::inputParam);            //reset the field type to inputParam 
MFC odbc访问远程数据库
    RFX_Text(pFX, "@issd", m_UserID);                    //,255,SQL_CHAR,0);     
MFC odbc访问远程数据库
    pFX->SetFieldType(CFieldExchange ::outputParam);
MFC odbc访问远程数据库    RFX_Text(pFX, 
"@nsssame", m_UserName);                //bind the @m_UserName to the m_UseraName
MFC odbc访问远程数据库

MFC odbc访问远程数据库}
  
MFC odbc访问远程数据库
MFC odbc访问远程数据库MFC odbc访问远程数据库
/**//////////////////////////////////////////////////////////////////////////////  
MFC odbc访问远程数据库//   myRecorderSet   diagnostics  
MFC odbc访问远程数据库

MFC odbc访问远程数据库#ifdef _DEBUG 
MFC odbc访问远程数据库
void myRecorderSet::AssertValid() const 
MFC odbc访问远程数据库MFC odbc访问远程数据库
...
MFC odbc访问远程数据库    CRecordset::AssertValid(); 
MFC odbc访问远程数据库}
 
MFC odbc访问远程数据库
MFC odbc访问远程数据库
void myRecorderSet::Dump(CDumpContext& dc) const 
MFC odbc访问远程数据库MFC odbc访问远程数据库
...
MFC odbc访问远程数据库    CRecordset::Dump(dc); 
MFC odbc访问远程数据库}
 
MFC odbc访问远程数据库
#endif 
MFC odbc访问远程数据库
MFC odbc访问远程数据库
void myRecorderSet::Move(long nrows, WORD wfetchtype) 
MFC odbc访问远程数据库MFC odbc访问远程数据库
...
MFC odbc访问远程数据库    
if (m_nFields) 
MFC odbc访问远程数据库        CRecordset ::Move(nrows, wfetchtype); 
MFC odbc访问远程数据库    
else 
MFC odbc访问远程数据库        m_bBOF 
= m_bEOF = true
MFC odbc访问远程数据库}
 
MFC odbc访问远程数据库
void myRecorderSet::SetInputParam(CString sUserID)
MFC odbc访问远程数据库MFC odbc访问远程数据库
...{
MFC odbc访问远程数据库    m_UserID
= sUserID;
MFC odbc访问远程数据库}

相关文章: