<转>vc 用ado访问Oracle数据库的代码示例

简介: #pragma once class CDBOp { public: bool ReConnect(); bool CloseConnect(); bool OpenConnect(CString hostName, CString dBName, CString us...
#pragma once

class CDBOp  
{
public:
	bool ReConnect();
	bool CloseConnect();
	bool OpenConnect(CString hostName, CString dBName, CString userName, CString password);
	bool GetItemData(CString itemID, float &price, CString &descript);  //取存储过程数据,这里只是举例说明
	CString GetErrorMsg();
	CDBOp();
	virtual ~CDBOp();
private:
	_ConnectionPtr m_pConnection;  //连接对象
	_RecordsetPtr m_pRecordset;     //记录集对象
	bool   m_bConnectSuccess;     //连接是否成功
	CString   m_strConnString;      //数据库连接字符串 
	CString   m_strErrMsg;           //保存错误信息
};




#include "StdAfx.h"
#include "DBOp.h"

//类实现


CDBOp::CDBOp():m_bConnectSuccess(false)
{
	::CoInitialize(NULL);
	m_pConnection.CreateInstance("ADODB.Connection");
	m_pConnection->ConnectionTimeout=30; 
	m_pRecordset.CreateInstance("ADODB.Recordset");
}
CDBOp::~CDBOp()
{
	//::CoUninitialize();
	CloseConnect();
}
//打开连接(数据库类型,主机名,数据库名,登陆名,密码)
//数据库类型: 0 为Sql server, 1为 Oracle
bool CDBOp::OpenConnect(
						CString hostName, 
						CString dBName, 
						CString userName, 
						CString password)        
{
	CString strConn;

	//MSDAORA or OraOLEDB.Oracle.1
	strConn = "Provider=OraOLEDB.Oracle.1";
	strConn+= ";Persist Security Info=true";
	strConn+= ";User ID=";
	strConn+= userName;
	strConn+= ";Password=";
	strConn+= password;
	strConn+= ";Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)";
	strConn+= "(HOST=";
	strConn+= hostName;
	strConn+= ")(PORT=1521))(CONNECT_DATA=";
	strConn+= "(SERVICE_NAME=";
	strConn+= dBName;
	strConn+= ")))";


	if (strConn.IsEmpty()) 
	{
		m_strErrMsg="The connect string is null.";
		return false;
	}
	CloseConnect();
	m_strConnString =strConn; 

	return ReConnect();
}
//再次连接
bool CDBOp::ReConnect()
{
	m_strErrMsg=_T("");
	m_bConnectSuccess= false;
	HRESULT hr;
	try
	{
		hr = m_pConnection->Open(_bstr_t(m_strConnString), "", "", adModeUnknown);
		if (SUCCEEDED(hr))
			m_bConnectSuccess=true;  
	}
	catch(_com_error e)
	{  
		m_strErrMsg.Format(_T("Connect database failure!\r\n\r\n message error:%s\r\n\r\n The connect string:%s"),e.ErrorMessage(),m_strConnString); 
	}
	return m_bConnectSuccess;
}
//关闭链接
bool CDBOp::CloseConnect()
{
	if (m_bConnectSuccess)
	{
		if (m_pConnection->State==1) 
			m_pConnection->Close(); 
		m_bConnectSuccess =false;
	}
	return true;
}
//取得错误信息
CString CDBOp::GetErrorMsg()
{
	return m_strErrMsg;
}

bool CDBOp::GetItemData(CString itemID, float &price, CString &descript)
{
	_CommandPtr   pCommand = NULL;
	pCommand.CreateInstance("ADODB.Command");
#ifdef   _DEBUG   
	if   (pCommand   ==   NULL)   
	{   
		AfxMessageBox(_T("Command Created fail! Please confirm whether initialize COM."));   
	}   
#endif   
	ASSERT(pCommand   !=   NULL);  
	try   
	{   
		if (m_bConnectSuccess==false)
		{
			if (ReConnect()==false) 
				return false;
		}
		//输入参数   itemID    
		_ParameterPtr   pParamItemID;   
		pParamItemID.CreateInstance("ADODB.Parameter");   
		pParamItemID->Name="ItemID";   //所用存储过程参数名称   
		pParamItemID->Type=adChar;    //参数类型   
		pParamItemID->Size=10;     //参数大小   
		pParamItemID->Direction=adParamInput;  //表明是输入参数   
		pParamItemID->Value=_variant_t(itemID);   
		pCommand->Parameters->Append(pParamItemID);    


		//输出参数   price    
		_ParameterPtr   pParamPrice;       
		pParamPrice.CreateInstance("ADODB.Parameter");   
		pParamPrice->Name="Price";    //参数名称   
		pParamPrice->Type=adNumeric;    //参数类型   
		pParamPrice->Size=9;      //参数大小
		pParamPrice->Precision =9;
		pParamPrice->NumericScale =2;  
		pParamPrice->Direction=adParamOutput;  //声明是输出参数   
		pCommand->Parameters->Append(pParamPrice);  

		//输出参数   Descript    
		_ParameterPtr   pParamDescript;       
		pParamDescript.CreateInstance("ADODB.Parameter");   
		pParamDescript->Name="Descript";   //参数名称   
		pParamDescript->Type=adVarChar;    //参数类型   
		pParamDescript->Size=160;     //参数大小
		pParamDescript->Direction=adParamOutput; //声明是输出参数   
		pCommand->Parameters->Append(pParamDescript);  
		//执行存储过程   
		pCommand->ActiveConnection=m_pConnection;   
		pCommand->CommandText="spItemInfo";   //存储过程名称   
		pCommand->CommandType=adCmdStoredProc;  //表示为存储过程adCmdStoredProc   
		pCommand->Execute(NULL,   NULL,   adCmdStoredProc);   


		price=(float)(pParamPrice->Value);
		descript = (char*)_bstr_t(pParamDescript->Value);  
		return true;
	}
	catch(_com_error   e)   
	{         
		m_strErrMsg.Format(_T("Error:GetItemData. Reason:%s\n file: %s; line: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);       
		return false;
	}   

}

  转自http://www.cnblogs.com/finema/archive/2008/08/22/1273478.html

相关文章
|
2月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
351 93
|
1月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】使用NetManager创建Oracle数据库的监听器
Oracle NetManager是数据库网络配置工具,用于创建监听器、配置服务命名与网络连接,支持多数据库共享监听,确保客户端与服务器通信顺畅。
180 0
|
2月前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
285 8
|
4月前
|
SQL Oracle 关系型数据库
比较MySQL和Oracle数据库系统,特别是在进行分页查询的方法上的不同
两者的性能差异将取决于数据量大小、索引优化、查询设计以及具体版本的数据库服务器。考虑硬件资源、数据库设计和具体需求对于实现优化的分页查询至关重要。开发者和数据库管理员需要根据自身使用的具体数据库系统版本和环境,选择最合适的分页机制,并进行必要的性能调优来满足应用需求。
249 11
|
4月前
|
Oracle 关系型数据库 数据库
数据库数据恢复—服务器异常断电导致Oracle数据库报错的数据恢复案例
Oracle数据库故障: 某公司一台服务器上部署Oracle数据库。服务器意外断电导致数据库报错,报错内容为“system01.dbf需要更多的恢复来保持一致性”。该Oracle数据库没有备份,仅有一些断断续续的归档日志。 Oracle数据库恢复流程: 1、检测数据库故障情况; 2、尝试挂起并修复数据库; 3、解析数据库文件; 4、导出并验证恢复的数据库文件。
|
2月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
133 3
|
2月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
3月前
|
存储 运维 关系型数据库
从MySQL到云数据库,数据库迁移真的有必要吗?
本文探讨了企业在业务增长背景下,是否应从 MySQL 迁移至云数据库的决策问题。分析了 MySQL 的优势与瓶颈,对比了云数据库在存储计算分离、自动化运维、多负载支持等方面的优势,并提出判断迁移必要性的五个关键问题及实施路径,帮助企业理性决策并落地迁移方案。
|
2月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。

热门文章

最新文章

推荐镜像

更多