vc++连接SQL SERVER类

来源:互联网 发布:肯德基麦当劳创业知乎 编辑:程序博客网 时间:2024/05/16 20:31

头文件:

#if !defined(DBOPERATION_H)#defineDBOPERATION_H#import "C:\Program files\common files\system\ado\msado15.dll"no_namespace rename("EOF", "adoEOF")typedef struct InfoOpenDB{intType;//数据库类型;0:sql, 1:accessCStringSource;//连接的数据源char*UId;//登陆数据库的用户名char*password;//登陆密码char*IPad;//IP地址}InfoOpenDB;#defineVTInt(m)(m.vt != VT_NULL ? m.operator short(): 0)//_variant_t to int#defineVTF(m)(m.vt != VT_NULL ? m.operator float(): 0)//_variant_t to float#defineVTS(m)(m.vt != VT_NULL ? (LPTSTR)_bstr_t(m): "")//_variant_t to CString#defineSTChA(m)(char *)(LPCTSTR)m//CString to char * #defineSTV(s)(_variant_t)(s)classCMyDataBase{//construct functionpublic:CMyDataBase(InfoOpenDB);//Attributespublic:_ConnectionPtrm_pConnection;_RecordsetPtrm_pRecordset;private:InfoOpenDBDBinf;//Operationspublic:intConnectDataBase();_RecordsetPtrOpenRecord(char Source[]);_RecordsetPtrExecuteQuery(char QueryString[1024]);//SQL 查询CStringGetDBName();//取得当前数据库名称voidCloseDataBase();//关闭数据库private:BOOLinit();//控件初始化//Implementationpublic:virtual ~CMyDataBase();protected:};#endif


 

实现:

 

#include"stdafx.h"#include"MyDataBase.h"CMyDataBase::CMyDataBase(InfoOpenDBinfo){DBinf.Type = info.Type;DBinf.Source = info.Source;DBinf.UId = info.UId;DBinf.password = info.password;DBinf.IPad = info.IPad;}CMyDataBase::~CMyDataBase(){}BOOL CMyDataBase::init(){if(AfxGetThreadState()->m_bNeedTerm)//控件是否已经初始化了,待测试.return TRUE;if(!AfxOleInit()){AfxMessageBox("ole 初始化失败,请与管理员联系");returnFALSE;}return TRUE;}/*-----------------------------------------function:connectwith databasereturn:1 successs;-1 组件初始化失败, -2 类型错误,0 数据库打开错误.------------------------------------------*/int CMyDataBase::ConnectDataBase(){if(!init())return-1;CloseDataBase();try{CStringsql;if(DBinf.Type == 0)//sql{sql.Format("driver={SQL Server}; Server=%s; DATABASE=%s; UID=%s; PWD=%s", DBinf.IPad, DBinf.Source, DBinf.UId, DBinf.password);}else if(DBinf.Type == 1)//access{sql.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=%s;", DBinf.Source);}else{AfxMessageBox("在使用 CMyDataBase类时输入了错误的数据库类型");return -2;}HRESULThResult = m_pConnection.CreateInstance(__uuidof(Connection));m_pConnection->ConnectionTimeout = 2;//连接等待时间.if(SUCCEEDED(hResult)){if(DBinf.Type == 0){m_pConnection->Open((_bstr_t)sql, "", "", adModeUnknown);//密码已经包含在sql中.}else{m_pConnection->Open((_bstr_t)sql, (_bstr_t)DBinf.UId, (_bstr_t)DBinf.password, -1);}}}catch(_com_error e){DBinf.Type == 0 ? AfxMessageBox("连接远程数据库失败"): AfxMessageBox("本地数据库连接失败,确认本地数据库是否在当前路径下!");return FALSE;}returnTRUE;}_RecordsetPtr CMyDataBase::ExecuteQuery(char QueryString[]){try{m_pConnection->CommandTimeout = 3;//查询等待时间.m_pRecordset = m_pConnection->Execute(QueryString, NULL, adCmdText);returnm_pRecordset;}catch(_com_error* e){AfxMessageBox(e->ErrorMessage());returnNULL;}}_RecordsetPtr CMyDataBase::OpenRecord(char Source[]){m_pRecordset.CreateInstance(__uuidof(Recordset));try{m_pConnection->CommandTimeout = 3;//查询等待时间.m_pRecordset->Open(Source, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);returnm_pRecordset;}catch(_com_error* e){AfxMessageBox(e->ErrorMessage());returnNULL;}}CStringCMyDataBase::GetDBName(){return(CString)(DBinf.Source);}void CMyDataBase::CloseDataBase(){try{if(this->m_pConnection->State)this->m_pConnection->Close();}catch(...){;}}


原创粉丝点击