MFC使用ADO连接SQL Server2012

关于ADO的介绍百度百科和其他博文中都有讲过,这里就不赘述了。之前查的关于使用ADO连接数据库SQL Server 2012的文章中,自己也是总结了一下,希望以后再用到的时候能够快速找到。


1.首先需要在SQL Server中建立自己等会需要用到的数据库及相关的表,这里用到的数据库名称为“MoreLive“


2.如果你的SQL Server是使用“Windows 身份验证”连接的,即为下图这中情况:

MFC使用ADO连接SQL Server2012_第1张图片


这个时候你需要更改一下“身份验证方式”。方式如下:

①使用原来的“windows 身份验证”方式连接数据库

②在左侧的“对象资源管理器”中找到“安全性”->"登录名",双击“sa",即可进入登录名的密码设置:

MFC使用ADO连接SQL Server2012_第2张图片

MFC使用ADO连接SQL Server2012_第3张图片

③更改完之后,使用“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;

5.在“MFCDBTestDlg.cpp"的OnInitDialog()中连接数据库

// 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的界面如下。由于项目比较多,截取一部分。

MFC使用ADO连接SQL Server2012_第4张图片

MFC使用ADO连接SQL Server2012_第5张图片

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.此时你在“图书查询”中输入书名时,“查询结果”的列表框就会罗列出其结果。



你可能感兴趣的:(数据库)