64,282
社区成员
发帖
与我相关
我的任务
分享
CADODB.h
#ifndef CADODB_FILE
#define CADODB_FILE
#include <Windows.h>
#include <string>
#import "C:\Program Files\Common Files\System\ado\msado15.dll"\
no_namespace\
rename("EOF","adoEOF")
class CADO
{
public:
CADO();
~CADO();
HRESULT Connection();
HRESULT Execute();
HRESULT Login(std::string str);
void Close();
private:
HRESULT InitDB();
//打开记录集
HRESULT OpenRecordSet();
//从打开的记录集中读取返回的结果
HRESULT ReadRecordSet();
HRESULT hr;
VARIANT var;
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
_CommandPtr m_pCommand;
std::string m_strUser;
std::string m_strPwd;
std::string m_strDB;
std::string m_strIP;
std::string m_strPort;
std::string m_strTable;
};
#endif
CADODB.cpp
#include "CADODB.h"
#include "CReadIni.h"
#include <iostream>
CADO::CADO()
{
m_pConnection = NULL;
m_pRecordset = NULL;
m_pCommand = NULL;
InitDB();
}
CADO::~CADO()
{
}
void CADO::Close()
{
try{
if(m_pRecordset->State)
{
m_pConnection->Close();
m_pConnection = NULL;
}
if(m_pConnection->State)
{
m_pConnection->Close();
m_pConnection = NULL;
}
}
catch (_com_error e)
{
std::cout<<e.ErrorMessage()<<endl;
hr = S_FALSE;
}
}
HRESULT CADO::InitDB()
{
try
{
hr = CoInitialize(NULL);
if(!m_pConnection)
{
hr = m_pConnection.CreateInstance("ADODB.Connection");
if(FAILED(hr))
{
std::cout<<"m_pConnection 创建失败"<<std::endl;
}
}
if(!m_pRecordset){
hr = m_pRecordset.CreateInstance(__uuidof(Recordset));
if(FAILED(hr)){
std::cout<<"m_pRecordset 创建失败"<<std::endl;
}
}
}
catch (_com_error e)
{
std::cout<<e.ErrorMessage()<<endl;
hr = S_FALSE;
}
return hr;
}
HRESULT CADO::Connection()
{
_LSTR strtemp[20];
#ifdef _UNICODE
char temp[20];
XReadIni().SetFileName(L"config.ini");
XReadIni().GetString(L"DB",L"IP",strtemp);
XReadIni().WideCharToMultiByte(strtemp,temp);
m_strIP = temp;
XReadIni().GetString(L"DB",L"DB",strtemp);
XReadIni().WideCharToMultiByte(strtemp,temp);
m_strDB = temp;
XReadIni().GetString(L"DB",L"user",strtemp);
XReadIni().WideCharToMultiByte(strtemp,temp);
m_strUser = temp;
XReadIni().GetString(L"DB",L"pwd",strtemp);
XReadIni().WideCharToMultiByte(strtemp,temp);
m_strPwd = temp;
#else
XReadIni().SetFileName("config.ini");
XReadIni().GetString("DB","IP",strtemp);
m_strIP = strtemp;
XReadIni().GetString("DB","DB",strtemp);
m_strDB = strtemp;
XReadIni().GetString("DB","user",strtemp);
m_strUser = strtemp;
XReadIni().GetString("DB","pwd",strtemp);
m_strPwd = strtemp;
#endif
try{
std::string DBConnect;
DBConnect = "Driver=SQL Server;Server="
+ m_strIP + ",1991;DATABASE="
+ m_strDB + ";UID="
+ m_strUser + ";PWD="
+ m_strPwd;
//超时
hr = m_pConnection->put_ConnectionTimeout(long(5));
hr = m_pConnection->Open(DBConnect.c_str(),"","",adModeUnknown);
if(SUCCEEDED(hr))
{
std::cout<<"连接成功"<<std::endl;
//连接时间
m_pConnection->put_CommandTimeout(long(5));
}
}
catch(_com_error e)
{
std::cout<<e.ErrorMessage()<<endl;
hr = S_FALSE;
}
return hr;
}
HRESULT CADO::Execute()
{
hr = OpenRecordSet();
if(SUCCEEDED(hr))
{
hr = ReadRecordSet();
}
return hr;
}
HRESULT CADO::OpenRecordSet()
{
try{
hr = m_pRecordset->Open("Select * from UserInfo where u_id=123456789 and u_PassWord='ABCDabcd'",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_error e){
std::cout<<e.ErrorMessage()<<endl;
hr = S_FALSE;
}
return hr;
}
HRESULT CADO::Login(std::string str)
{
try{
hr = m_pRecordset->Open(str.c_str(),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
if(SUCCEEDED(hr))
{
hr = ReadRecordSet();
}
}
catch(_com_error e){
std::cout<<e.ErrorMessage()<<endl;
hr = S_FALSE;
}
return hr;
}
HRESULT CADO::ReadRecordSet()
{
long int u_id;
std::string u_name;
std::string u_nickname;
std::string u_pwd;
try{
while(!m_pRecordset->adoEOF){
var = m_pRecordset->GetCollect("u_Id");
u_id = var.lVal;
var = m_pRecordset->GetCollect("u_Name");
u_name = (char*)_bstr_t(var);
var = m_pRecordset->GetCollect("u_PassWord");
u_pwd = (char*)_bstr_t(var);
var = m_pRecordset->GetCollect("u_NickName");
u_nickname = (char*)_bstr_t(var);
hr = m_pRecordset->MoveNext();
}
}
catch(_com_error e)
{
std::cout<<e.ErrorMessage()<<endl;
hr = S_FALSE;
}
return hr;
}