开发者社区> 狂斩一条龙> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

<转>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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Jdbc连接Oracle数据库详细案例,占位符的使用
Jdbc连接Oracle数据库详细案例,占位符的使用
0 0
Oracle数据库的增、删、改,索引、视图以及序列的创建和销毁
Oracle数据库的增、删、改,索引、视图以及序列的创建和销毁
0 0
Oracle数据库的简单认识详细总结
Oracle数据库的简单认识详细总结
0 0
Oracle数据库 创建触发器和序列(上)
Oracle数据库 创建触发器和序列
0 0
Oracle 数据库删除某一行数据
Oracle 数据库删除某一行数据
0 0
PLSQL连接Oracle数据库详细教程
PLSQL连接Oracle数据库详细教程
0 0
Python连接Oracle数据库完美教程
Python连接Oracle数据库完美教程
0 0
数据库小技能:Oracle基础之【常用函数】
虚表dual ,它是一行一列,没有任何数据,常常用于测试。
0 0
数据库小技能:Oracle基础之【查询】
DQL:(数据查询语言,select)用来完成对数据库中的数据查询。 DDL(数据定义语言,create,drop,truncate截断表)操作表结构。 DML(数据库操作语言,insert,delete,update)操作数据
0 0
+关注
狂斩一条龙
惯用c++,在windows平台做应用开发和底层研究,并对ua语言有深入的了解
文章
问答
文章排行榜
最热
最新
相关电子书
更多
ORACLE数据库和应用异构 迁移最佳实践
立即下载
PostgresChina2018_樊文凯_ORACLE数据库和应用异构迁移最佳实践
立即下载
Oracle 数据库笔记
立即下载