开发者社区> 技术小阿哥> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介:
+关注继续查看
#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
文章
问答
文章排行榜
最热
最新
相关电子书
更多
ORACLE数据库和应用异构 迁移最佳实践
立即下载
PostgresChina2018_樊文凯_ORACLE数据库和应用异构迁移最佳实践
立即下载
Oracle 数据库笔记
立即下载