ADO连接并访问数据库(MSSQL、Oracle、MySQL等)

1.引入msado.dll动态库

添加以下代码到*.cpp文件或者添加到*.h头文件(该头文件要被*.cpp文件引用),编译一次,自动生成msado15.tlh和msado15.tli文件

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

2.建立数据库交互类(使用面向过程编程可以将函数独立出来,类的私有成员可以设置成全局变量)

class CONN_DB
{
public:
	void OnInitADOConn();//连接数据库
	_RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);//执行查询,返回记录集
	BOOL ExecuteSQL(_bstr_t bstrSQL);//执行SQL语句,不更新数据集的内容
	void ExitConnect();//断开连接
	void Check();
private:
	_ConnectionPtr m_pConnection;//数据库连接指针,指向数据库
	_RecordsetPtr m_pRecordset;//记录集,返回查询结果
};

3.连接数据库函数(代码以MSSQL为例,其他数据连接连接字符串上有差异)

void CONN_DB::OnInitADOConn()
{
	::CoInitialize(NULL);//初始化OLE/COM库环境
	try
	{
		m_pConnection.CreateInstance("ADODB.Connection");//创建Connection对象
		_bstr_t strConnect = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=数据库名;Data Souese=.";//连接字符串
		m_pConnection->Open(strConnect, "", "", adModeUnknown);//打开本地数据库
	}
	catch (_com_error e)
	{
		std::cout << e.Description() << std::endl;
	}
}

Oracle数据库

Provider=OraOLEDB.Oracle;DATA SOURCE=ORCL;USER ID=system;PASSWORD=密码;//ORCL为数据库名,system为用户名

MySQL(首先需打开ODBC数据源(64位)新建名为MysqlODBC的DSN)

m_pConnection->Open("DSN=MysqlODBC;server=localhost;database=数据库名", "root", "密码", adModeUnknown);
m_pConnection->CursorLocation = adUseClient;//与客户端游标有关,否则无法返回记录条数

3.操作数据库(查询)并返回结果

_RecordsetPtr& CONN_DB::GetRecordSet(_bstr_t bstrSQL)
{
	try
	{
		if (m_pConnection == NULL)
			OnInitADOConn();
		m_pRecordset.CreateInstance(__uuidof(Recordset));//创建记录集
		m_pRecordset->Open(bstrSQL, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);//使用adOpenStatic,可以调用记录集指针的函数返回记录个数
	}
	catch (_com_error e)
	{
		std::cout << e.Description() << std::endl;
	}
	return m_pRecordset;
}

4.执行SQL语句(插入、更新、删除等),不返回结果

BOOL CONN_DB::ExecuteSQL(_bstr_t bstrSQL)
{
	try
	{
		if (m_pConnection == NULL)
			OnInitADOConn();
		m_pRecordset = m_pConnection->Execute(bstrSQL, NULL, adCmdText);
		return TRUE;
	}
	catch (_com_error e)
	{
		std::cout << e.Description() << std::endl;
		return FALSE;
	}
}

5.断开连接

void CONN_DB::ExitConnect()
{
	if (m_pRecordset != NULL)
		m_pRecordset->Close();//关闭记录集
	m_pConnection->Close();//断开连接
	::CoUninitialize();//释放环境
}

6.检查连接状态

void CONN_DB::Check()
{
	if (m_pConnection->State == adStateOpen)
		std::cout << "连接成功" << std::endl;
	else
		std::cout << "未连接" << std::endl;
}

 

你可能感兴趣的:(数据库,mysql,mssql,c++,ado.net)