您的位置:首页 > 博客中心 > 数据库 >

ADO MFC SQL2000

时间:2022-03-10 17:25

对于初学VC的朋友来说,连接数据库其实是一件不容易的事情。记得我当时为了与数据库连接上,找了好多资料,上网看了好多文章,都没有解决这个问题。后 来,有个网友帮我解决了,我再次表示感谢。为了后来VC初学的朋友的方便,我现在将VC连接SQL2000数据库的方法写下来,就算你是初学,即使刚入 门,也可以成功连接数据库的。

编辑框控件ID为:IDC_USERID,IDC_USERPWD

按钮控件ID为:IDC_OK,IDC_EXIT

 

9现在为按钮控件添加消息响应:菜单,“View”,“ClassWiarzd”,“MessageMap ”,“Client”,

“CClientDlg”,IDC_OK,BN_CLICED,Add Function ,OK,OK,

用同样的方法添加IDC_EXIT消息处理。

在CClientDlg的头文件中的某个Public下添加:

int m_count;

         ADO adoConn;

在OnExit()的代码如下:

void CClientDlg::OnExit()

{

         // TODO: Add your control notification handler code here

         int result;

         if(m_count>3)

         {

                   CDialog::OnCancel();

         }

         else

         {

                   result=MessageBox("是否真的要退出","提示",MB_YESNO);

                   if(IDYES==result) //exit

                   {

                            CDialog::OnCancel();

                   }

                   else if(IDNO==result) //no

                   {

                            m_UserID="";

                            m_UserPwd="";

                            UpdateData(FALSE);

                            GetDlgItem(IDC_USERID)->SetFocus();

                   }

         }

}

 

 

 

 

另一篇:

(1).在文件stdafx.h中最后一个#endif的前一行写入 
#import "C:\program files\common files\System\ado\msado15.dll"  no_namespace \
rename("EOF","EndOfFile") \
rename("LockTypeEnum","newLockTypeEnum") \
rename("DataTypeEnum","newDataTypeEnum") \
rename("FieldAttributeEnum","newFieldAttributeEnum") \
rename("EditModeEnum","newEditModeEnum") \
rename("RecordStatusEnum","newRecordStatusEnum") \
rename("ParameterDirectionEnum","newParameterDirectionEnum")
如果你的系统不是安装在C盘的话就把#import 后面的C改成系统所有的盘
--------------------------------------------------------------------------
(2).在C***App类的public:下加入 
     _RecordsetPtr m_pADOSet; 
     bool ADOExecute(_RecordsetPtr &ADOSet, _variant_t &strSQL); 
在private:下加入
private:
     _ConnectionPtr ADOConn; 
--------------------------------------------------------------------------
在class C***App : public CWinApp 

... 
};之后#endif之前加入
extern CxxxApp theApp; 
--------------------------------------------------------------------------
(3)在BOOL C***App::InitInstance()函数中Enable3dControls(); // Call this when linking 
to MFC statically这一行下面加入 
if( FAILED(::CoInitialize(NULL)) ) 

     AfxMessageBox("ADO Init failed"); 
     return false; 

try 

     ADOConn.CreateInstance(__uuidof(Connection)); 
     ADOConn->Open("DSN=OBDC数据源;Provider=MSDASQL","用户","密码", 
    adConnectUnspecified);//这一行要自已修改 

catch(_com_error &e) 

     CString err; 
     err.Format("%s", (char*)(e.Description()) ); 
     AfxMessageBox(err); 

catch(...) 

     AfxMessageBox("Unknown Error..."); 

m_pADOSet.CreateInstance(__uuidof(Recordset)); 
-------------------------------------------------------------------------
并在文件最后加上如下代码: 
bool CxxxApp::ADOExecute(_RecordsetPtr &ADOSet, _variant_t &strSQL) 

     if ( ADOSet->State == adStateOpen) ADOSet->Close(); 
     try 
     { 
         ADOSet->Open(strSQL, ADOConn.GetInterfacePtr(), adOpenStatic, adLockOptimistic, 
         adCmdUnknown); 
         return true; 
     } 
     catch(_com_error &e) 
     { 
         CString err; 
         err.Format("ADO Error: %s",(char*)e.Description()); 
         AfxMessageBox(err); 
         return false; 
     } 

------------------------------------------------------------------------
最后就可以在登录时执行SQL语句了,比如用户为CString strUser, 密码是CString 
strPwd;数据库表是user_table(user_id, user_name, user_pwd)则 
_variant_t sqlQuery ;
sqlQuery = "select * from user_table where user_name=‘"+strUser +"‘ and 
user_pwd=‘"+ strPwd +"‘"; 
theApp.ADOExecute(theApp.m_pADOSet, sqlQuery );
int iCount = theApp.m_pADOSet->GetRecordCount(); 
if ( 0==iCount ) 

     AfxMessageBox(_T("密码错误"), MB_ICONEXCLAMATION); 
     return; 

else 

     AfxMessageBox(_T("登录成功"), MB_ICONEXCLAMATION); 
}

ADO MFC SQL2000,布布扣,bubuko.com

热门排行

今日推荐

热门手游