关于ADO的介绍百度百科和其他博文中都有讲过,这里就不赘述了。之前查的关于使用ADO连接数据库SQL Server 2012的文章中,自己也是总结了一下,希望以后再用到的时候能够快速找到。
1.首先需要在SQL Server中建立自己等会需要用到的数据库及相关的表,这里用到的数据库名称为“MoreLive“
2.如果你的SQL Server是使用“Windows 身份验证”连接的,即为下图这中情况:
这个时候你需要更改一下“身份验证方式”。方式如下:
①使用原来的“windows 身份验证”方式连接数据库
②在左侧的“对象资源管理器”中找到“安全性”->"登录名",双击“sa",即可进入登录名的密码设置:
③更改完之后,使用“SQL Server 身份验证”,登录名为sa,密码是你刚才设置的密码
2.SQL Server的设置完成后就可以进入MFC操作了,首先使用MFC的向导建立一个基于对话框的程序。这里建立的MFC名称为MFCDBTest
3.在“stdafx.h"头文件中加入如下代码:
#import "C://Program Files//Common Files//System//ado//msado15.dll"no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF")
说明:这里导入的是一个支持ado操作的应用扩展程序,这个文件在C盘相应的路径文件下可以找到。4.在“MFCDBTestDlg.h"中添加一个公有成员变量
public:
_ConnectionPtr m_pConnection;
// TODO: 在此添加额外的初始化代码
//在初始化中连接数据库
::CoInitialize(NULL); //初始化OLE/COM库环境
HRESULT hr = NULL;
try
{
hr = m_pConnection.CreateInstance(_uuidof(Connection));//创建连接对象实例
if (SUCCEEDED(hr))
{
_bstr_t strConnect = "Provider=SQLOLEDB;Server=(local);Database=MoreLive;uid=sa;pwd=******";//初始化连接
hr = m_pConnection->Open(strConnect, "", "", adConnectUnspecified);//打开数据库
if (FAILED(hr))
{
AfxMessageBox(_T("Open Failed!"));
return FALSE;
}
}
else
{
AfxMessageBox(_T("Create instance of connection failed!"));
return FALSE;
}
}
catch (_com_error e)
{
CString temp;
temp.Format(L"数据库连接错误\r\n错误信息为:%s", e.ErrorMessage());
AfxMessageBox(temp);
return FALSE;
}
m_CtrlBorrowerBookNo.SetWindowTextW(L"请输入查询结果中可借书的编号");
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
说明:
bstr_t strConnect = "Provider=SQLOLEDB;Server=(local);Database=MoreLive;uid=sa;pwd=******";//初始化连接
这句中的密码pwd是你的之前设置的sa的密码,数据库为之前建立的数据库。
Provide=SQLOLEDB为数据库连接方式。其中OLE为对象连接与嵌入。
Server=(local)表示本地数据库连接
6.这个时候数据库就连接成功了。就可以在MFC中使用数据库了。例子的数据库“MoreLive”是实现图书的添加,图书借阅,图书查询等功能。这里只展示图书查询。
MFC的界面如下。由于项目比较多,截取一部分。
7.双击“点击添加”按钮为其添加相应函数。在函数中写如下代码:
// TODO: 在此添加控件通知处理程序代码
ResultList.ResetContent();
m_CtrlQueryBookName.GetWindowTextW(m_QueryBookName);
if (m_QueryBookName == "")
return;
try{
_RecordsetPtr pRst(__uuidof(Recordset)); //实例化一个Recordset对象pRst
_CommandPtr pCmd(__uuidof(Command)); //实例化一个Command对象pCmd
pCmd->put_ActiveConnection(_variant_t((IDispatch*)m_pConnection));
CString CmdStr;
CmdStr.Format(L"SELECT * FROM QueryBook WHERE BOOKNAME='%s'", m_QueryBookName);
pCmd->CommandText = (_bstr_t)CmdStr;
pRst = pCmd->Execute(NULL, NULL, adCmdText);
//m_pRecord = pRst;
CString Liststr;
Liststr.Format(L" 书编号 所有人ID 状态 联系方式");
ResultList.AddString(Liststr);
while (!pRst->adoEOF)
{
//把数据库中学号这列的内容放入IDC_LIST1的LIST控件中
ResultList.AddString((_bstr_t)pRst->GetCollect("BookNo") + " " + (_bstr_t)pRst->GetCollect("OwnerID") + " " + (_bstr_t)pRst->GetCollect("BookState") + " " + (_bstr_t)pRst->GetCollect("PhoneNo"));
pRst->MoveNext(); //下移一个
}
pRst.Release();
pCmd.Release();
}
catch (_com_error e){
CString errorstr;
errorstr.Format(L"查询失败。\r\n错误信息:%s", e.ErrorMessage());
}
①ResultList为“查询结果”的列表框控件的控制变量。
②其中pRst记录查询结果。pCmd执行数据库SQL语句。
8.此时你在“图书查询”中输入书名时,“查询结果”的列表框就会罗列出其结果。