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 实体数据模型 ...
随机推荐
- HDU3306-Another kind of Fibonacci(矩阵构造)
Another kind of Fibonacci Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- 008.CI4框架CodeIgniter, Controller控制器传输参数到View视图
01. 在CI4中输出VIEW视图,并且传入参数,代码如下: <?php namespace App\Controllers; class Home extends BaseController ...
- nginx做维护页面
需求: 一个网站本来有好几个域名,然后也有好几个二级域名,现在停掉了,要求把所有的域名.二级域名,以及具体的文件请求,都指向一个维护页面. 1 单独在vhost里建一个conf文件 server { ...
- CANmonitor我自己编写的程序
这个版本的程序, 上位机可以对电机的转速进行在线的设定,同时上位机接受电机控制器上报的母线电压,电机温度,控制器温度等. 在调试的过程中我遇见了一个问题,电机的转速的采样 . 根据协议:电机的转速为1 ...
- 定时自动备份mysql
首先,利用定时shell脚本来实现 #!/bin/sh DATE=`date +%Y-%m-%d_%H:%M:%S` Pass='VHlrakBNeVNRTDNlZGMkUkZW' #加密解密密码,避 ...
- nginx location语法解释
1.没有修饰符 表示:必须以指定模式开始,如: 默认模式 server { server_name baidu.com; location /abc { …… } } htt ...
- python 输出六行星号✳
for i in range(1,6): for j in range(5-i): print(" ",end=" ") for j in range(1,2* ...
- 刷题49. Group Anagrams
一.题目说明 题目是49. Group Anagrams,给定一列字符串,求同源词(包含相同字母的此)的集合.题目难度是Medium. 二.我的做法 题目简单,就不多说,直接上代码: class So ...
- python 检测端口是否被占用
前记 python中有些常用的东西,虽然小,但是非常实用.这里就做个备忘吧. 实例 检测端口是否被占用. ''' -- coding: utf-8 -- import os import sock ...
- 112-PHP类变量之间的赋值标识为同一个对象(二)
<?php class mao{ //定义猫类 public $age=0; //定义多个属性并初始化 public $weight=50; public $color='white'; } $ ...