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