C++ 操作数据库类

#pragma once
#include <string>
#include <windows.h>
#include <algorithm>
#include <vector>
#include <comdef.h>
#import "c:\\program files\\common files\\system\\ado\\msado15.dll"  no_namespace rename("EOF", "adoEOF")
#pragma warning(disable:4996)
using namespace std;
class SQLOperator
{
public:
        SQLOperator();
        ~SQLOperator();
        bool InitSQL(const string& strIP, const string& strUser, const string& strPwd, const string& strDBName);
        BOOL GetSqlInfo(const string& strInfo, int nColumn, vector<vector<string>>&vInfo);
        BOOL DoSql(const string& strInfo);
        void CloseSql();

private:
        _ConnectionPtr pConnection;
        _CommandPtr pCmd;
        _RecordsetPtr pRecord;
};
.cpp文件:<pre name="code" class="cpp">#include "stdafx.h"
#include "SQL.h"
#include <Winerror.h>
SQLOperator::SQLOperator()
{

}
bool SQLOperator::InitSQL(const string& strIP, const string& strUser, const string& strPwd, const string& strDBName)
{
        ::CoInitialize(NULL);
        try{
                HRESULT hr = pConnection.CreateInstance("ADODB.Connection");//
                if (SUCCEEDED(hr)){
                        char tcData[MAX_PATH * 4] = { 0 };
                        sprintf(tcData, "Driver={sql server};server=%s,1433;u,
                                strIP.c_str(), strUser.c_str(), strPwd.c_str(), strDBName.c_str());
                        hr = pConnection->Open(tcData, "", "", adModeUnknown);
                        if (SUCCEEDED(hr)){
                                return true;
                        }
                        else{
                                return false;
                        }
                }
                else{
                        return false;
                }
        }
        catch (_com_error e){
                ::MessageBox(NULL, e.Description(), _T("异常"), MB_OK);
                return false;
        }
        return true;
}
BOOL SQLOperator::GetSqlInfo(const string& strInfo, int nColumn, vector<vector<string>>&vInfo)
{
        try{
                _variant_t vAffected;
                pRecord = pConnection->Execute(strInfo.c_str(), &vAffected, adCmdText);

                //枚举查询结果集
                if (!pRecord->adoEOF){
                        pRecord->MoveFirst();
                }
                else{
                        return FALSE;
                }
                while (!pRecord->adoEOF){
                        VARIANT vtID[16];
                        _variant_t vt[16];
                        string str[16];
                        vector<string>vTemp;
                        for(int i = 0; i < nColumn; i++){
                                vtID[i].vt = VT_I4;
                                vtID[i].lVal = i;
                                vt[i] = (pRecord->Fields->GetItem(vtID[i])->Value);
                        }

                        for (int i = 0; i < nColumn; i++){
                                if (vt[i].vt == VT_NULL){
                                        str[i] = " ";
                                }
                                else{
                                        str[i] = (char*)(_bstr_t)vt[i];
                                }
                                vTemp.push_back(str[i]);
                        }
                        vInfo.push_back(vTemp);
                        pRecord->MoveNext();
                }
        }
        catch (_com_error e){
                ::MessageBox(NULL, e.Description(), _T("异常"), MB_OK);
                return false;
        }
        return true;
}
BOOL SQLOperator::DoSql(const string& strInfo)
{
        try{
                _variant_t vAffected;
                pConnection->Execute(strInfo.c_str(), &vAffected, adCmdText);
                return vAffected.intVal;
        }
        catch (_com_error e){
                ::MessageBox(NULL, e.Description(), _T("异常"), MB_OK);
        }
        return false;
}
void SQLOperator::CloseSql()
{
        //pRecord->Close();
        pConnection->Close();
        ::CoUninitialize();
}
SQLOperator::~SQLOperator()
{

}
main函数:
<pre name="code" class="cpp">int _tmain(int argc, _TCHAR* argv[])
{
     SQLOperator sql;//实例化类对象
     sql.InitSQL("192.168.1.87", "", "", "IMSDB1");//初始化SQL语句
     sql.GetSqlInfo("select a.CardNo, b.LimitBegin, b.LimitEnd from HrEmployee a left join LtSiteGrant b \
on a.EmpID = b.EmpID where b.SiteID = 1 and b.GrantState = 1");
//sql.DoSql("delete from chd_info");
     sql.CloseSql();//调用类成员函数
     return 0;
}