在VS的MFC单文档工程中加入SQL数据库
首先,在电脑上安装数据库;以SQL2008为例,安装完成后,打开界面如图所示,服务器名称为本机电脑名称,选择SQL Server身份验证,密码为电脑的开机密码;点击连接进入;
进入之后,在数据库这一选项里建立所需要的数据库,这里以Doctors为例;
这里设置了用户登陆界面密码,即在Doctors数据库的表这一选项里,添加所需要的表;表添加完成后,在所添加的表下面,添加列,即包括用户名和登陆密码;至此,数据库部分的简单设置就算完成了;
接下来建立基于MFC的单文档工程,工程建好后,在其中添加一个登陆对话框,对话框上添加用户名和登陆密码编辑框Edit Cotrol;分别为其添加变量m_Name;m_Password;变量的类型改为CString类;改为CString后会出现错误,
错误 1 error C2664: “void DDX_Control(CDataExchange *,int,CWnd &)”: 无法将参数 3 从“CString”转换为“CWnd &” ;
改错只需将DDX_Control改为DDX_Text即可;
连接数据库代码如下:
void CLog::OnBnClickedOk() //OnBnClickedOk()函数为对话框上的确定按键;
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
if (m_Name.IsEmpty() || m_Password.IsEmpty()) //判断数据是否为空
{
MessageBox("用户名或密码不能为空");
}
else
{
CoInitialize(NULL); //初始化COM组件
_ConnectionPtr pConn(__uuidof(Connection)); //实例化一个connection对象pConn,连接对象
_RecordsetPtr pRst(__uuidof(Recordset)); //实例化一个Recordset对象pRst,记录集对象
_CommandPtr pCmd(__uuidof(Command)); //实例化一个Command对象pCmd,命令对象
pConn->ConnectionString = "Provider = SQLOLEDB.1;Persist Security Info = False;User ID = sa ;Password = 123;Initial Catalog =Doctors;Data Source=DESKTOP-KKT1HG5"; //连接数据库
pConn->Open("", "", "", adConnectUnspecified);//打开数据库。此处参数均已在上述字符串声明,故可为空
//Data Source = DESKTOP - KKT1HG5; Initial Catalog = Doctors; Persist Security Info = True; User ID = sa
try
{
CString strSql;
strSql.Format("Select * from Doctor_logon where username='%s' and password='%s'", m_Name, m_Password);
pRst = pConn->Execute(_bstr_t(strSql), NULL, adCmdText);//将查询数据导入m_pRecordset数据容器
}
catch (_com_error e) //捕捉异常
{
AfxMessageBox(e.Description());
}
if (!pRst->adoEOF) //查询
{
username = m_Name;
CLog::OnOK(); //进入主窗体并关闭登录框
}
else
{
MessageBox("用户名或密码不正确");
}
pRst->Close(); //关闭对象
pConn->Close();
pCmd.Release(); //释放对象
pRst.Release();
pConn.Release();
::CoUninitialize();
}
}
程序添加后,还需要对VS软件进行设置,具体设置方法可参考百度经验,链接如下:
https://jingyan.baidu.com/article/3ea51489e562bb52e61bbab0.html
至此,MFC与数据库的连接基本完成了,运行之后,输入用户名和密码,就可以进入单文档工程了。其中用户名和密码是在建立数据库表与列的时候,在列中直接添加上的
运行效果如下图所示: