C++ 连接数据库sqlserver

// DataBase.h: interface for the CDataBase class.
//
//

#if !defined(AFX_DATABASE_H__0964F832_4E25_45B5_84E6_022362B3D1A8__INCLUDED_)
#define AFX_DATABASE_H__0964F832_4E25_45B5_84E6_022362B3D1A8__INCLUDED_

#pragma warning(disable:4146)
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename ("BOF","adoBOF") 
#pragma warning(disable: 4251)


#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "AfxDB.h"
class CDB  
{
public:
    /*BOOL GetVarIntValue(char *cFieldName, int *iResult);
    BOOL DBState();
    bool GetFieldValue(int iField, CString &strResult);
    BOOL GetFieldValue(char *cFieldName, double *dResult);

    BOOL Rollback();
    BOOL CommitTrans();
    BOOL BeginTrans();
    BOOL GetFieldValue(int iField,int *iResult);
    void CloseRecordSet();
    BOOL GetFieldValue(char *,CString &strResult);
    void MoveNext();
    BOOL IsEOF();
    BOOL GetFieldValue(char *,int *iResult);
    BOOL OpenTable(CString &strSql);
    void CloseDatabase();
    BOOL ExecuteSQL(CString& sql);*/
    BOOL ConnectDB(char *cIp,char *cDbName,char *cUserName,char *cPassWord);
    BOOL IsOpenAdoConn();
    //重新打开连接
    BOOL ReOpenAdoConn();
    void CloseAdoConn();
    //执行SQL语句
    BOOL ExecuteSql(const char *pSql, long lOptions = adCmdText);
    bool OpenAdoRecordSet(_RecordsetPtr &recordSet, const char* pSql, long lOption = adCmdText, CursorTypeEnum CursorType = adOpenDynamic, LockTypeEnum LockType = adLockOptimistic);
    CDB();
    virtual ~CDB();
private:
    //CDatabase  m_db;
    //CRecordset m_rs;
    _ConnectionPtr    m_db;
    _bstr_t     m_bstrSql;
};

// DataBase.cpp: implementation of the CDataBase class.
//
//

#include "stdafx.h"
#include "DataBase.h"
#include "stdlib.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif


CString g_str;  //全局变量,操作数据库
//
// Construction/Destruction
//

CDB::CDB()
{
    m_db = NULL;
    CoInitialize(NULL);
}

CDB::~CDB()
{
    CloseAdoConn();
    CoUninitialize();
}

BOOL CDB::ConnectDB(char *cIp, char *cDbName, char *cUserName, char *cPassWord)
{
    try
    {
        char sSql[256];
        memset(sSql, 0, 256);
        sprintf(sSql, "Provider=SQLOLEDB.1;Password=%s;Persist Security Info=True;User ID=%s;Initial Catalog=%s;Data Source=%s", cPassWord, cUserName, cDbName, cIp);
        m_bstrSql = (_bstr_t)sSql;
        m_db.CreateInstance("ADODB.Connection");
        m_db->Open(m_bstrSql, "", "", adModeUnknown);
    }
    catch (_com_error e)
    {
        char sMsg[512];
        memset(sMsg, 0, 512);
        sprintf(sMsg, "Warning: 打开数据库连接(OpenAdoConn)异常.错误信息:%s; 文件:%s; 行:%d", e.ErrorMessage(), __FILE__, __LINE__);
        memset(sMsg, 0, 512);
        sprintf(sMsg, "错误代码:%08x,错误代码信息:%s,错误源:%s,错误描述:%s", e.Error(), e.ErrorMessage(), (char*)e.Source(), (char*)e.Description());
        return false;
    }
    
   // m_rs.m_pDatabase=&m_db;
    return true;
}

BOOL CDB::IsOpenAdoConn()
{
    try
    {
        return (m_db != NULL && (m_db->State & adStateOpen));
        //if (m_pAdoConn != NULL && (m_pAdoConn->State & adStateOpen))
        //{
        //    char sSql[256];
        //    memset(sSql,0,256);
        //    sprintf(sSql,"select top(1) corporation from WFCfg");  //判断电场配置表中是否有数据
        //    //m_pAdoConn->Execute(_bstr_t(sSql),NULL,adCmdText);
        //    return true;
        //}    
    }
    catch (_com_error e)
    {
        //断开重连
        CloseAdoConn();
        ReOpenAdoConn();

        return false;
    }
    return false;
}

BOOL CDB::ReOpenAdoConn()
{
    try
    {
        if (m_bstrSql.length() <= 0)
            return false;
        m_db.CreateInstance("ADODB.Connection");
        m_db->Open(m_bstrSql, "", "", adModeUnknown);
    }
    catch (_com_error e)
    {
        return false;
    }
    return true;
}

void CDB::CloseAdoConn()
{
    if (m_db != NULL)
    {
        m_db->Close();
        m_db.Release();
        m_db = NULL;
    }
}

BOOL CDB::ExecuteSql(const char *pSql, long lOptions)
{
    if (strlen(pSql) == 0)
    {
        return false;
    }
    try
    {
        //连接数据库,如果Connection为空,则重新连接数据库
        if (!IsOpenAdoConn())
        {
            ReOpenAdoConn();
        }
        m_db->Execute(_bstr_t(pSql), NULL, lOptions);
        return true;
    }
    catch (_com_error e)
    {
        //断开重连
        CloseAdoConn();
        ReOpenAdoConn();
        return false;
    }
}

bool CDB::OpenAdoRecordSet(_RecordsetPtr &recordSet, const char* pSql, long lOption/* = adCmdText*/, CursorTypeEnum CursorType/* = adOpenStatic*/, LockTypeEnum LockType/* = adLockOptimistic*/)
{
    //_RecordsetPtr recordSet = NULL;
    if (strlen(pSql) == 0)
    {
        return false;
    }
    try
    {
        //连接数据库,如果Connection为空,则重新连接数据库
        if (!IsOpenAdoConn())
        {
            ReOpenAdoConn();
        }
        //创建记录集对象
        recordSet.CreateInstance(__uuidof(Recordset));
        //取得表中记录    
        recordSet->Open(_bstr_t(pSql), m_db.GetInterfacePtr(), CursorType, LockType, lOption);
    }
    //捕捉异常
    catch (_com_error e)
    {
        //显示错误信息

        //断开重连
        CloseAdoConn();
        ReOpenAdoConn();

        return false;
    }
    if (recordSet == NULL)
    {
        return false;
    }
    return true;
}

//BOOL CDB::ExecuteSQL(CString &sql)
//{
//    TRACE1("%s",sql);
//    m_db.ExecuteSQL(sql);
//    return true;
//}
//
//void CDB::CloseDatabase()
//{
//    if(m_db.IsOpen())
//        m_db.Close();
//}
//
//BOOL CDB::OpenTable(CString &strSql)
//{
//    if(m_rs.IsOpen())
//    {
//        m_rs.Close();
//    }
//    try
//    {
//        TRACE1("%s",strSql);
//        m_rs.Open(CRecordset::snapshot,strSql,CRecordset::readOnly);
//    }
//    catch(...)
//    {
//        MessageBox(NULL,"打开数据库错误","err",0);
//        m_rs.Close();
//        return false;
//    }
//    if(!m_rs.IsOpen()) 
//    {
//        MessageBox(NULL,"无法连接数据库","err",0);
//        return false;
//    }
//    return true;
//}
//
//BOOL CDB::GetFieldValue(char *cFieldName,int *iResult)
//{
//    CString str;
//    m_rs.GetFieldValue(cFieldName,str);
//    *iResult=atoi(str.GetBuffer(0));
//    return true;
//}
//
//BOOL CDB::GetFieldValue(int iField, int *iResult)
//{
//    m_rs.GetFieldValue(iField,g_str);
//    *iResult=atoi(g_str.GetBuffer(0));
//    return true;
//}
//
//BOOL CDB::GetFieldValue(char *cFieldName, double *dResult)
//{
//    m_rs.GetFieldValue(cFieldName,g_str);
//    *dResult=atof(g_str.GetBuffer(0));
//    return true;
//    
//}
//
//BOOL CDB::GetFieldValue(char *cFieldName, CString &strResult)
//{
//    m_rs.GetFieldValue(cFieldName,strResult);
//    return true;
//}
//
//bool CDB::GetFieldValue(int iField, CString &strResult)
//{
//    m_rs.GetFieldValue(iField,strResult);
//    return true;
//}
//
//
//BOOL CDB::IsEOF()
//{
//    return m_rs.IsEOF();
//}
//
//void CDB::MoveNext()
//{
//    m_rs.MoveNext();
//}
//
//void CDB::CloseRecordSet()
//{
//    m_rs.Close();
//}
//
//
事务处理
//BOOL CDB::BeginTrans()
//{
//    return m_db.BeginTrans();
//}
//
//BOOL CDB::CommitTrans()
//{
//    return m_db.CommitTrans();
//}
//
//BOOL CDB::Rollback()
//{
//    return m_db.Rollback();
//}
//
//
//BOOL CDB::DBState() //数据库连接是否断开
//{
//    return m_db.IsOpen();
//}
//
//BOOL CDB::GetVarIntValue(char *cFieldName, int *iResult)  //得到长整数值
//{
//    CDBVariant m_varValue;
//    m_rs.GetFieldValue(cFieldName,m_varValue);
//    *iResult=m_varValue.m_lVal;
//    return true;
//}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟来了2022

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值