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 实体数据模型 ...
随机推荐
- Oracle 修改 提交后 回退
1. -- 查询你执行update 语句之前的数据 精确到什么时间 select * from 表名 as of timestamp to_timestamp('2017-07-21 17:16:38 ...
- Stm32CubeMx lwip+freeRTOS TCP 服务
如何添加lwip参照上一篇 stm32CubeMx lwip + freeRTOS 今天讲一下,如何添加TCP服务 LwIP 提供了三种编程接口,分别为 RAW/Callback API.NETC ...
- 文本情感分析(二):基于word2vec、glove和fasttext词向量的文本表示
上一篇博客用词袋模型,包括词频矩阵.Tf-Idf矩阵.LSA和n-gram构造文本特征,做了Kaggle上的电影评论情感分类题. 这篇博客还是关于文本特征工程的,用词嵌入的方法来构造文本特征,也就是用 ...
- dom与jq基础使用
js有两种运行环境,一个是浏览器,一个是服务器(NodeJS) js的本质是es,因为运行环境的不同,为了操作环境内的api做了升级 在浏览器上js分为es + dom + bom 在服务器上js又有 ...
- JS取整方法
1.toFixed方法 定义:toFixed() 方法可把 Number 四舍五入为指定小数位数的数字. 例如:将数据Num保留2位小数,则表示为:toFixed(Num):但是其四舍五入的规则与数学 ...
- 删除C代码中的注释行【状态机】
今天在学ruby时遇到的一个经典的题目,一直都知道但从来没有实现过.呈上状态机,代码略.(写代码的时候还是需要注意一些小情况的)
- 嵊州普及Day2T1
题意:对于给出的数列,有多少数可表示为另两数的和. 思路:先排个序,桶排思路.以一个数组储蓄所有出现的和.最后循环判断是否b[i]>0. 见代码: #include<iostream> ...
- ①spring简介以及环境搭建(一)
注*(IOC:控制反转.AOP:面向切面编程) spring官网:http://spring.io/ spring简介: spring是一个开源框架 spring为简化企业级应用开发而生,使用Spri ...
- java 如何爬取百度百科词条内容(java如何使用webmagic爬取百度词条)
这是老师所布置的作业 说一下我这里的爬去并非能把百度词条上的内容一字不漏的取下来(而是它分享链接的一个主要内容概括...)(他的主要内容我爬不到 也不想去研究大家有好办法可以call me) 例如 互 ...
- Git 的 4 个阶段的撤销更改
虽然git诞生距今已有12年之久,网上各种关于git的介绍文章数不胜数,但是依然有很多人(包括我自己在内)对于它的功能不能完全掌握.以下的介绍只是基于我个人对于git的理解,并且可能生编硬造了一些不完 ...