基于ADO的MFC与SQL Server连接

第一步:在stdafx.h中添加:

注意:此处应加在最后一个#include下方,以免编译出错

#import "C:\\Program Files\\Common Files\\System\\ado\\msado15.dll" no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF")

第二部:在***Dlg.h中添加

_ConnectionPtr m_pConnection;

第三步:在***Dlg.cpp的OnInitDialog()中添加

注意:

Database:数据库名称,uid:登陆账号,pwd:登陆密码

	::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=***;uid=***;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;
	}

第四步:在按钮中通过命令和记录集操作数据库

创建数据表:

	/*创建数据表*/
	try{
		CString CmdStr;
		_RecordsetPtr pRst(__uuidof(Recordset));	//实例化一个Recordset对象pRst
		_CommandPtr pCmd(__uuidof(Command));	//实例化一个Command对象pCmd
		pCmd->put_ActiveConnection(_variant_t((IDispatch*)m_pConnection));
		/*创建数据表*/
		CmdStr = _T("CREATE TABLE userinfo( \
			id int PRIMARY KEY,\
			name varchar(20),\
			 password varchar(20), \
			 email varchar(20), \
			 QQ varchar(20),\
			 tel varchar(20))");
		pCmd->CommandText = (_bstr_t)CmdStr;
		pCmd->Execute(NULL, NULL, adCmdText);
		pRst.Release();	//释放记录集
		pCmd.Release();	//释放命令
	}
	catch (_com_error e){
		CString errostr;
		errostr.Format(L"查询失败。\r\n错误信息:%s", e.ErrorMessage());
		AfxMessageBox(errostr);
	}
添加数据:
	/*添加一行数据*/
	try{
		CString CmdStr;
		_RecordsetPtr pRst(__uuidof(Recordset));	//实例化一个Recordset对象pRst
		_CommandPtr pCmd(__uuidof(Command));	//实例化一个Command对象pCmd
		pCmd->put_ActiveConnection(_variant_t((IDispatch*)m_pConnection));
		CmdStr = _T("INSERT INTO userinfo(id,name,password,email,QQ,tel)VALUES(88888888,'大坏蛋','男','88888888','88888888			','88888888')");
		pCmd->CommandText = (_bstr_t)CmdStr;
		pCmd->Execute(NULL, NULL, adCmdText);
		pRst.Release();	//释放记录集
		pCmd.Release();	//释放命令
	}
	catch (_com_error e){
		CString errostr;
		errostr.Format(L"查询失败。\r\n错误信息:%s", e.ErrorMessage());
		AfxMessageBox(errostr);
	}
修改数据:
	/*修改数据*/
	try{
		CString CmdStr;
		_RecordsetPtr pRst(__uuidof(Recordset));	//实例化一个Recordset对象pRst
		_CommandPtr pCmd(__uuidof(Command));	//实例化一个Command对象pCmd
		pCmd->put_ActiveConnection(_variant_t((IDispatch*)m_pConnection));
		CmdStr = _T("UPDATE userinfo SET name = '大坏蛋' WHERE id=88888888");
		pCmd->CommandText = (_bstr_t)CmdStr;
		pCmd->Execute(NULL, NULL, adCmdText);
		pRst.Release();	//释放记录集
		pCmd.Release();	//释放命令
	}
	catch (_com_error e){
		CString errostr;
		errostr.Format(L"查询失败。\r\n错误信息:%s", e.ErrorMessage());
		AfxMessageBox(errostr);
	}
删除数据:
	/*删除数据*/
	try{
		CString CmdStr;
		_RecordsetPtr pRst(__uuidof(Recordset));	//实例化一个Recordset对象pRst
		_CommandPtr pCmd(__uuidof(Command));	//实例化一个Command对象pCmd
		pCmd->put_ActiveConnection(_variant_t((IDispatch*)m_pConnection));
		CmdStr = _T("DELETE FROM userinfo WHERE id = 88888888");
		pCmd->CommandText = (_bstr_t)CmdStr;
		pCmd->Execute(NULL, NULL, adCmdText);
		pRst.Release();	//释放记录集
		pCmd.Release();	//释放命令
	}
	catch (_com_error e){
		CString errostr;
		errostr.Format(L"查询失败。\r\n错误信息:%s", e.ErrorMessage());
		AfxMessageBox(errostr);
	}
查询数据:
	/*查询数据*/
	try{
		CString CmdStr;
		_RecordsetPtr pRst(__uuidof(Recordset));	//实例化一个Recordset对象pRst
		_CommandPtr pCmd(__uuidof(Command));	//实例化一个Command对象pCmd
		pCmd->put_ActiveConnection(_variant_t((IDispatch*)m_pConnection));
		CmdStr = _T("SELECT * FROM userinfo");
		pCmd->CommandText = (_bstr_t)CmdStr;
		pRst = pCmd->Execute(NULL, NULL, adCmdText);
		while(!pRst->adoEOF)
		{
			//读取内容
			CString str = (_bstr_t)pRst->GetCollect("id") + " " + (_bstr_t)pRst->GetCollect("name") + " " + (_bstr_t)		pRst->GetCollect("email") + " " + (_bstr_t)pRst->GetCollect("QQ");
		pRst->MoveNext(); //下移一个  
		}

		pRst.Release();	//释放记录集
		pCmd.Release();	//释放命令
	}
	catch (_com_error e){
		CString errostr;
		errostr.Format(L"查询失败。\r\n错误信息:%s", e.ErrorMessage());
		AfxMessageBox(errostr);
	}





你可能感兴趣的:(基于ADO的MFC与SQL Server连接)