VS2015---MFC运用ado操作Sql Server2012数据库

1 本文目的

MFC通过ADO对Sql Server 2012 做数据操作,主要操作包含:数据库的连接与断开,数据的查询与插入。

2 操作过程

2.1 配置头文件

在stdafx.h文件中添加如下代码:

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

2.2 数据库的连接

a) 定义一数据库操作类:class AdoSql; 

b) 定义成员变量:

	_ConnectionPtr  m_pConnection;		//连接对象
	_RecordsetPtr  m_pRecordSet;		//记录集对象

c) 定义连接数据库函数:

bool AdoSql::InitialConn()
{
	::CoInitialize(NULL);
	HRESULT hr = NULL;

	try
	{
		hr = m_pConnection.CreateInstance(_uuidof(Connection));//创建连接对象实例;	
		
		if (!SUCCEEDED(hr))
		{
			OutToLog(_T("CreateInstance failed"));
			return false;
		}
        //uid 代表的登录数据库的登录名,pwd为登录密码,server 代表数据库所在的ip和端口号。database为数据库名
		_bstr_t strConnect = "Driver={sql server};server=127.0.0.1,1433;uid=sa;pwd=12345678;database=lab_changsha;";
		hr = m_pConnection->Open(strConnect, "", "", adModeUnknown);
		if (!SUCCEEDED(hr)) {
			AfxMessageBox(_T("连接数据库失败"));
			return false;
		}
	}
	catch (_com_error e)
	{
		CString strError;
		strError.Format(_T("连接数据库失败\n %s:%s %d"), e.ErrorMessage(), (LPCTSTR)e.Description());
		AfxMessageBox(strError);
		return false;
	}
	return true;
}

2.3 读取数据库中表数据

typedef struct CommunicationInfo
{
	CString ip;
	INT		port;
}COMMUNICATION;

//url为sql select遍历语句
bool AdoSql::getInfoCom(CString url, COMMUNICATION& communication_info)
{
	try {
		m_pRecordSet.CreateInstance(_uuidof(Recordset));		//创建记录集
		_variant_t vAffected;
//		CString url1 = _T("select equip_ip, equip_port from dbo._0_5_temperature_impact_box");
		m_pRecordSet->Open((_variant_t)url, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);
		_variant_t varian_ip, variant_port;
		while (!m_pRecordSet->adoEOF)
		{
			communication_info.ip = m_pRecordSet->GetCollect("equip_ip");
			communication_info.port = (INT)m_pRecordSet->GetCollect("equip_port");
			m_pRecordSet->MoveNext();
		}
		m_pRecordSet->Close();
	}
	catch (_com_error e)
	{
		CString strError;
		strError.Format(_T("读取数据库数据失败\n %s:%s %d"), e.ErrorMessage(), (LPCTSTR)e.Description());
		OutToLog(strError);
        m_pRecordSet->Close();
		return false;
	}
	return true;
}

2.4 插入数据

/*
//插入数据的字符串格式,类似于:CString strSql = _T("INSERT  family.dbo.Info VALUES(6, \'xiaofan\', \'1997-01-13\', \'zongyang\', \'cloth\')");
char[]用\来转义,而且字符串用''来表示
*/
bool AdoSql::writeDatabase(CString url)
{
	try 
	{	
		m_pConnection->Execute(_bstr_t(url), NULL, adCmdText);		
	}
	catch (_com_error e)
	{
		CString strError;
		strError.Format(_T("修改数据库数据失败\n %s:%s %d"), e.ErrorMessage(), (LPCTSTR)e.Description());
		OutToLog(strError);
		return false;
	}
	return true;
}

2.5 断开数据库连接

void AdoSql::ExitConn()
{
	m_pConnection->Close();
	return; 
}


 

 

 

 

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值