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;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++ 操作数据库类的更多相关文章
- 非常不错的ASP操作数据库类,支持多数据库MSSQL,ACCESS,ORACLE,MYSQL等
可同时操作多个不同类型的数据库. 完全不用考虑数据类型的差别,再也不用想字符型字段加不加单引号. 调用非常简单,对数据库的主要操作一般只需要一行代码. 支持mssql事务回滚. 可自动生成和输出sql ...
- PHP操作数据库类
<?php /** * 功能: 数据库操作类 . * 作者: 赵铭哲 * 日期: 2016-05-23 * 时间: 9:43 */ namespace ZH\DataBase; use \Exc ...
- ecshop操作数据库类
ECShop v2.7.2没有使用一些开源的数据库操作类,比如adodb或者PEAR,而是封装了自己的实现.这样做的好处是实现非常轻量,只有一个文件,27Kb,大大减小了分发包的文件大小.另外,当网站 ...
- Python操作数据库类 Oracle、Sqlserver、PostgreSQL
我在工作中经常使用Python,特点很明显,轻量,效率还不错,尤其在维护或者自动化方面. 下面是我使用到的访问数据库(Oracle.Sqlserver.PostgreSQL)的公共类. 一.Oracl ...
- mybatis 操作数据库(05)
类型转换.动态排序,查询接口与mapper对应关系说明及其注意事项 一.MyBatis 自带写常见类型转换器.例如:java 类中 String 对应 mySQL中的varchar 二.自定义类型转换 ...
- 用于JDBC操作数据库的公共类
/* * @(#)CommonSql.java 2011-9-5 * * Copyright 2011 Bianjing,All rights reserved. */ import java.sql ...
- JDBC操作数据库 封装好的工具类
mysql sqlserver oracle 数据库的驱动jar包http://download.csdn.net/download/csdn576038874/8833683package cn.h ...
- SQLserver数据库操作帮助类SqlHelper
1 SqlHelper源码 using System; using System.Data; using System.Xml; using System.Data.SqlClient; using ...
- .NET使用DAO.NET实体类模型操作数据库
一.新建项目 打开vs2017,新建一个项目,命名为orm1 二.新建数据库 打开 SqlServer数据库,新建数据库 orm1,并新建表 student . 三.新建 ADO.NET 实体数据模型 ...
随机推荐
- mybatis连接数据库出错获取不到SQLsession
采用mybatis连接数据库时候出现的问题描述: 数据库连接配置正确,mybatis-config数据库等部分配置均正确,连接数据库是OK的 <properties resource=" ...
- Adobe Illustrator CC 2017安装方法
1.下载软件地址 2017破解版32位64位中文版下载[百度网盘资源地址]:https://pan.baidu.com/s/13BsU8CfsLB6OXr7SkRFzCg 注意:使用之前请关闭杀毒软件 ...
- SQL中Left Join 与Right Join 与 Inner Join 与 Full Join的区别
原文:http://blog.csdn.net/shadowyelling/article/details/7684714 Left Join : 返回左表中的全部信息 以及右表中与左表条件相关的信息 ...
- face_recognition人脸识别
对亚洲人识别准确度有点差,具体安装移步:https://www.cnblogs.com/ckAng/p/10981025.html 更多操作移步:https://github.com/ageitgey ...
- DevOps - 生命周期
章节 DevOps – 为什么 DevOps – 与传统方式区别 DevOps – 优势 DevOps – 不适用 DevOps – 生命周期 DevOps – 与敏捷方法区别 DevOps – 实施 ...
- jrebel插件的激活
转 jrebel idea插件激活,亲测可用: 在jrebel server处,写上: http://139.199.89.239:1008/88414687-3b91-4286-89ba-2dc81 ...
- 指令——mkdir
一个完整的指令的标准格式: Linux通用的格式——#指令主体(空格) [选项](空格) [操作对象] 一个指令可以包含多个选项,操作对象也可以是多个 指令mkdir——(make directory ...
- Django——整体结构/MVT设计模式
MVT设计模式 Models 封装数据库,对数据进行增删改查; Views 进行业务逻辑的处理 Templates 进行前端展示 前端展示看到的是模板 --> 发起 ...
- TensorFlow2 Part3:动态模型建立与训练
Keras是一个由Python编写的开源人工神经网络库,可以作为Tensorflow.Microsoft-CNTK和Theano的高阶应用程序接口,进行深度学习模型的设计.调试.评估.应用和可视化 [ ...
- ubuntu18.04.2 hadoop3.1.2+zookeeper3.5.5高可用完全分布式集群搭建
ubuntu18.04.2 hadoop3.1.2+zookeeper3.5.5高可用完全分布式集群搭建 集群规划: hostname NameNode DataNode JournalNode Re ...