#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;uid=%s;pwd=%s;database=%s;",
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;
}
												

最新文章

  1. 64-who 简明笔记
  2. 同步文本框内容的JS代码
  3. C++ Brush
  4. 转载:10个实用的但偏执的Java编程技术
  5. Implement the hash table using array / binary search tree
  6. OS快速开发必备
  7. HTML5实战与剖析之classList属性
  8. Source Insight、Xshell(putty)、Xftp
  9. vue 点击当前元素添加class 去掉兄弟的class 获取当前点击元素的文字
  10. centos 7 安装sql 审核工具 inception + archer
  11. ABP框架系列之十八:(Data-Transfer-Objects-数据转换对象)
  12. 初识神经网络NeuralNetworks
  13. java中JDBC连接Oracle数据库
  14. 用photoshop 把视频镜头做成GIF图片
  15. English trip -- Review Unit6 Time 时间
  16. Android 创建自定义 View 的属性 (attrs) 时需要注意的问题
  17. 初识js-charts和E-charts
  18. 数据库——SQL中EXISTS怎么用3(转)
  19. WordPress 中文图片 上传 自动重命名
  20. aspx页面 按钮不响应回车键

热门文章

  1. Python测试进阶——(4)Python程序监控、存储、分析并可视化CPU和内存利用率
  2. spingboot2.0外部引入xml配置文件时找不到文件等报错
  3. 查看oracle单签session
  4. String+、intern()、字符串常量池
  5. 001-PHP静态变量
  6. Spark on Yarn | Spark,从入门到精通
  7. 使用Vue+JFinal框架搭建前后端分离系统
  8. flask邮箱注册问题
  9. c++数据结构排序
  10. 小程序跳坑之JSON字符串转换JSON对象