#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;
}
												

C++ 操作数据库类的更多相关文章

  1. 非常不错的ASP操作数据库类,支持多数据库MSSQL,ACCESS,ORACLE,MYSQL等

    可同时操作多个不同类型的数据库. 完全不用考虑数据类型的差别,再也不用想字符型字段加不加单引号. 调用非常简单,对数据库的主要操作一般只需要一行代码. 支持mssql事务回滚. 可自动生成和输出sql ...

  2. PHP操作数据库类

    <?php /** * 功能: 数据库操作类 . * 作者: 赵铭哲 * 日期: 2016-05-23 * 时间: 9:43 */ namespace ZH\DataBase; use \Exc ...

  3. ecshop操作数据库类

    ECShop v2.7.2没有使用一些开源的数据库操作类,比如adodb或者PEAR,而是封装了自己的实现.这样做的好处是实现非常轻量,只有一个文件,27Kb,大大减小了分发包的文件大小.另外,当网站 ...

  4. Python操作数据库类 Oracle、Sqlserver、PostgreSQL

    我在工作中经常使用Python,特点很明显,轻量,效率还不错,尤其在维护或者自动化方面. 下面是我使用到的访问数据库(Oracle.Sqlserver.PostgreSQL)的公共类. 一.Oracl ...

  5. mybatis 操作数据库(05)

    类型转换.动态排序,查询接口与mapper对应关系说明及其注意事项 一.MyBatis 自带写常见类型转换器.例如:java 类中 String 对应 mySQL中的varchar 二.自定义类型转换 ...

  6. 用于JDBC操作数据库的公共类

    /* * @(#)CommonSql.java 2011-9-5 * * Copyright 2011 Bianjing,All rights reserved. */ import java.sql ...

  7. JDBC操作数据库 封装好的工具类

    mysql sqlserver oracle 数据库的驱动jar包http://download.csdn.net/download/csdn576038874/8833683package cn.h ...

  8. SQLserver数据库操作帮助类SqlHelper

    1 SqlHelper源码 using System; using System.Data; using System.Xml; using System.Data.SqlClient; using ...

  9. .NET使用DAO.NET实体类模型操作数据库

    一.新建项目 打开vs2017,新建一个项目,命名为orm1 二.新建数据库 打开 SqlServer数据库,新建数据库 orm1,并新建表 student . 三.新建 ADO.NET 实体数据模型 ...

随机推荐

  1. Python测试进阶——(4)Python程序监控、存储、分析并可视化CPU和内存利用率

    monitor190617.py 监控cpu和内存利用率信息,组织成json格式,并写入到 record.txt 文件中: import psutil import time import json ...

  2. 条件判断语句(if-else)

    if-else 语法 if-else 语法,只有一个语句块被执行 if 和 else都是Java中的关键字 if 语法 把 if-else 看做一个表达式,程序整体还是顺序执行的 if (boolea ...

  3. 036、Java中三目运算符的使用

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  4. java代码静态分析工具

    需求:有些基础类型的遍历,值希望它被赋予指定的几个值,赋予其他值能够别编译器(IDEA/eclipse)提醒 Android studu结合自己的插件,引入 <!-- https://mvnre ...

  5. Web基础之Dubbo

    Dubbo RPC即Remote Procedure Call,即为远程调用.这和Java的远程代理RMI有点类似,不过RMI只能在Java系统之间进行调用,并且是使用序列化对象的方式进行通信.相比之 ...

  6. Web基础之Spring IoC

    Spring之IoC 概念   IoC:Inversion of Control,中文通常翻译为"控制反转",它还有一个别名叫做依赖注入(Dependency Injection) ...

  7. yum对于包和软件的安装、升级和卸载总结

    在Centos下yum的安装.升级和卸载 一.使用yum安装和卸载软件,有个前提是yum安装的软件包都是rpm格式的.安装的命令是,yum install ~,yum会查询数据库,有无这一软件包,如果 ...

  8. jquery隐藏表格的某列

    $('#tableId tr').find('th:eq(3)').hide(); ---------------------------------------------------------- ...

  9. R语言 线性回归分析实例 《回归分析与线性统计模型》page72

    y,X1,X2,X3 分别表示第 t 年各项税收收入(亿元),某国生产总值GDP(亿元),财政支出(亿元)和商品零售价格指数(%). (1) 建立线性模型: ① 自己编写函数: > librar ...

  10. js加密(十三)zzxt.hee.gov.cn md5

    1. url: http://zzxt.hee.gov.cn/ 2. target: 登录加密 3. 简单分析: 这个应该很容易就能找到加密的js,直接拿出来就好. 4. js: /* * md5 * ...