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

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

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,_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,_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,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,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()),adParamOutput,val);
        m_pCmd->Parameters->Append(pPara);
    }
}
  
void sqlService::ModifyPro(string& newProName)
{
    m_ProcName=newProName;
    m_pCmd->CommandText=_bstr_t(m_ProcName.c_str());
}

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...