MFC(VS2008)通过ADO连接SQLSERVER2008

https://blog.csdn.net/seamanjt/article/details/28493845

先在stdafx.h加上

#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","rsEOF") 


#pragma once
 
class ADOConn
{
// 定义变量
public:
//添加一个指向Connection对象的指针:
_ConnectionPtr m_pConnection;
//添加一个指向Recordset对象的指针:
_RecordsetPtr m_pRecordset;
// 定义方法
public:
ADOConn();
virtual ~ADOConn();
// 初始化—连接数据库
void OnInitADOConn();
// 执行查询
_RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
// 执行SQL语句,Insert Update _variant_t
BOOL ExecuteSQL(_bstr_t bstrSQL);
void ExitConnect();
};


#include "StdAfx.h"
#include "ADOConn.h"
 
ADOConn::ADOConn(void)
{
}
 
ADOConn::~ADOConn(void)
{
}
// 初始化—连接数据库
void ADOConn::OnInitADOConn()
{
    // 初始化OLE/COM库环境
    ::CoInitialize(NULL);
    try
    {
        // 创建Connection对象
        m_pConnection.CreateInstance("ADODB.Connection");
        // 设置连接字符串,必须是BSTR型或者_bstr_t类型
        _bstr_t strConnect = "Provider=SQLOLEDB; Server=.;Database=Student; uid=sa; pwd=admin;";
        m_pConnection->Open(strConnect,"","",adModeUnknown);
    }
    // 捕捉异常
    catch(_com_error e)
    {
        // 显示错误信息
        AfxMessageBox(e.Description());
    }
}
 
_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL)
{
    try
    {
        //连接数据库,如果connection为空则重新连接
        if(m_pConnection==NULL)
            OnInitADOConn();
        //创建记录集对象
        m_pRecordset.CreateInstance(__uuidof(Recordset));
        //取得表中的记录
        m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),
            adOpenDynamic,adLockOptimistic,adCmdText);
    }
    catch(_com_error e)
    {
        e.Description();
    }
    //返回记录集
    return m_pRecordset;
}
 
 
 
// 执行SQL语句,Insert Update _variant_t
BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
    // _variant_t RecordsAffected;
    try
    {
        // 是否已经连接数据库
        if(m_pConnection == NULL)
            OnInitADOConn();
        // Connection对象的Execute方法:(_bstr_t CommandText,
        // VARIANT * RecordsAffected, long Options )
        // 其中CommandText是命令字串,通常是SQL命令。
        // 参数RecordsAffected是操作完成后所影响的行数,
        // 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名
        // adCmdProc-存储过程;adCmdUnknown-未知
        m_pConnection->Execute(bstrSQL,NULL,adCmdText);
        return true;
    }
    catch(_com_error e)
    {
        AfxMessageBox(e.Description());
        return false;
    }
}
void ADOConn::ExitConnect()
{
    // 关闭记录集和连接
    if (m_pRecordset != NULL)
        m_pRecordset->Close();
    m_pConnection->Close();
    // 释放环境
    ::CoUninitialize();
}


要插入数据可以调用下面的语句


ADOConn conn;
    conn.OnInitADOConn();
    _bstr_t vSQL;
    vSQL = "INSERT INTO [Student].[dbo].[用户] ([用户名],[密码]) VALUES('seamanj','123')";
    conn.ExecuteSQL(vSQL);

完整程序请参见:http://download.csdn.net/detail/seamanjt/7448149

猜你喜欢

转载自blog.csdn.net/active2489595970/article/details/88237817