C++通过ADO操作Sql Server数据库的代码演示

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用

C++通过ADO操作Sql Server数据库的代码演示

class SQLService
{
public:
    SQLService(string procName);
    ~SQLService(void); 
    void AddPara(string paraName,_variant_t val);
    void AddParaOut(string paraName,_variant_t& val);
    void Insert();
    void Delete();
    void Update();
    void RefreshCmdPara();
    _RecordsetPtr& Query();
    void ModifyPro(string& newProName);
private:
    void ExitConnect();
    void OnInitADOConn();
    bool ExecuteProc();
private:
    _ConnectionPtr m_pConnection;
    _RecordsetPtr m_pRecordset;
    _CommandPtr m_pCmd;
    string m_ProcName;
};
  
  
#include "StdAfx.h"
#include "SQLService.h"
#import "c:program filescommon filessystemadomsado15.dll" no_namespace, rename("EOF", "adoEOF")
SQLService::SQLService(string procName)
{
m_pCmd=NULL;
m_pConnection=NULL;
m_pRecordset=NULL;
m_ProcName=procName;
}
  
SQLService::~SQLService(void)
{
ExitConnect();
}
  
void SQLService::OnInitADOConn()
{
::CoInitialize(NULL);
HRESULT hr;
try
{
hr=m_pConnection.CreateInstance("ADODB.Connection");//
if(SUCCEEDED(hr))
{
_bstr_t strConnect="Provider=SQLOLEDB;Server=.;Database=SURF;UID=sa;PWD=123;";
m_pConnection->Open(strConnect,"","",adModeUnknown);
m_pConnection->CursorLocation=adUseClient;
}
}
catch(_com_error& e)
{
MessageBox(NULL,(LPCWSTR)e.Description(),_T("打开数据库失败"),MB_OK);
m_pConnection->Close();
m_pConnection.Release();
m_pConnection=NULL;
return ;
}
  
try
{
hr=m_pRecordset.CreateInstance("ADODB.Recordset");
if(SUCCEEDED(hr))
{
m_pRecordset->CursorType=adOpenKeyset;
m_pRecordset->LockType=adLockOptimistic;
m_pRecordset->PutActiveConnection(m_pConnection.GetInterfacePtr());
}
}
catch(_com_error& e)
{
MessageBox(NULL,(LPCWSTR)e.Description(),_T("记录集创建失败"),MB_OK);
m_pConnection->Close();
m_pRecordset->Close();
m_pConnection.Release();
m_pRecordset.Release();
m_pConnection=NULL;
m_pRecordset=NULL;
return ;
}
  
try
{
hr=m_pCmd.CreateInstance(_uuidof(Command));
if(SUCCEEDED(hr))
{
m_pCmd->ActiveConnection=m_pConnection;
m_pCmd->CommandType=adCmdStoredProc;
m_pCmd->CommandText=_bstr_t(m_ProcName.c_str());
}
}
catch(_com_error& e)
{
    MessageBox(NULL,(LPCWSTR)e.Description(),_T("命令创建失败"),MB_OK);
    m_pConnection->Close();
    m_pRecordset->Close();
    m_pConnection->Release();
    m_pRecordset->Release();
    m_pCmd.Release();
    m_pConnection=NULL;
    m_pRecordset=NULL;
    m_pCmd=NULL;
    return ;
}
  
}
  
bool SQLService::ExecuteProc()//执行增删改操作
{
if(m_pConnection==NULL)
OnInitADOConn();
if(m_pCmd!=NULL)
{
    m_pCmd->Execute(NULL,NULL,adCmdStoredProc);
}
return true;
}
  
void SQLService::Insert()//执行增 操作
{
ExecuteProc();
}
  
void SQLService::Delete()//执行 删 操作
{
ExecuteProc();
}
  
void SQLService::Update()//执行 改 操作
{
ExecuteProc();
}
  
_RecordsetPtr& SQLService::Query()
{
if(m_pConnection==NULL)
OnInitADOConn();
if(m_pCmd!=NULL)
{
m_pRecordset=m_pCmd->Execute(NULL,NULL,adCmdStoredProc);
}
return m_pRecordset;
}
  
void SQLService::RefreshCmdPara()
{
    if(m_pCmd!=NULL)
    {
        m_pCmd.Release();
        m_pCmd=NULL;
    }
    try
    {
        HRESULT hr=m_pCmd.CreateInstance(_uuidof(Command));
        if(SUCCEEDED(hr))
        {
            m_pCmd->ActiveConnection=m_pConnection;
            m_pCmd->CommandType=adCmdStoredProc;
            m_pCmd->CommandText=_bstr_t(m_ProcName.c_str());
        }
    }
    catch(_com_error& e)
    {
        MessageBox(NULL,(LPCWSTR)e.Description(),_T("命令创建失败"),MB_OK);
        m_pConnection->Close();
        m_pRecordset->Close();
        m_pConnection->Release();
        m_pRecordset->Release();
        m_pCmd.Release();
  
        m_pConnection=NULL;
        m_pRecordset=NULL;
        m_pCmd=NULL;
        return ;
    }
}
void SQLService::ExitConnect()
{
if(m_pRecordset!=NULL&&m_pRecordset->State)
{
m_pRecordset->Close();
m_pRecordset.Release();
m_pRecordset=NULL;
}
  
if(m_pConnection!=NULL&&m_pConnection->State)
{
m_pConnection->Close();
m_pConnection.Release();
m_pConnection=NULL;
}
if(m_pCmd!=NULL)
{
    m_pCmd.Release();
    m_pCmd=NULL;
}
  
::CoUninitialize();
}
  
void SQLService::AddPara(string paraName,_variant_t val)
{
if(m_pConnection==NULL)
OnInitADOConn();
if(m_pCmd!=NULL)
{
_ParameterPtr pPara=m_pCmd->CreateParameter(_bstr_t(paraName.c_str()),adBSTR,adParamInput,255,val);
m_pCmd->Parameters->Append(pPara);
}
}
  
void SQLService::AddParaOut(string paraName,_variant_t& val)
{
    if(m_pConnection==NULL)
        OnInitADOConn();
    if(m_pCmd!=NULL)
    {
        _ParameterPtr pPara=m_pCmd->CreateParameter(_bstr_t(paraName.c_str()),adBSTR,adParamOutput,255,val);
        m_pCmd->Parameters->Append(pPara);
    }
}
  
void SQLService::ModifyPro(string& newProName)
{
    m_ProcName=newProName;
    m_pCmd->CommandText=_bstr_t(m_ProcName.c_str());
}

标签: 代码 数据库

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:JAVA生成解析二维码

下一篇:C++算法之A*算法