lnhv013710 2020-01-17 18:09 采纳率: 96.7%
浏览 284
已采纳

vs2010 mfc ADO连接SQL server 程序不解

图片说明
各位网友,
我在网站下载的一个MFC ADO方式连接SQL server数据库代码有个地方不明白,请帮忙看看
新建一个按钮,加入如下代码:

void CADOTESTDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码

  1. ADOConn conn;
  2. conn.OnInitADOConn();
  3. _bstr_t vSQL;
  4. vSQL = "INSERT INTO [dbtest].[dbo].userinfo VALUES('seamanj','123')";
  5. conn.ExecuteSQL(vSQL);
  6. conn.ExitConnect();
  7. conn.m_pConnection; }

MFC 中debug执行完第2行,m_pConnection中就有了地址,SQL server 中执行Select * from sys.dm_exec_connections可看到新的连接,但是执行完第6行应该m_pConnection中的地址被清空,并且断开连接的,可是实际情况是一直到执行完所有的代码并结束,m_pConnection才被清空并断开连接。
哪位能帮我解释下,谢谢。

void ADOConn::ExitConnect()
{
    // 关闭记录集和连接
    if (m_pRecordset != NULL)
        m_pRecordset->Close();
    m_pConnection->Close();

    // 释放环境
    ::CoUninitialize();
    //CString temp=_T("0");
}
void ADOConn::OnInitADOConn()
{
    // 初始化OLE/COM库环境
    //CoInitialize(NULL)和AfxOleInit()的区别:  https://blog.csdn.net/zhoubl668/article/details/4139933
    ::CoInitialize(NULL);
    try
    {
        // 创建Connection对象
        m_pConnection.CreateInstance("ADODB.Connection");
        // 设置连接字符串,必须是BSTR型或者_bstr_t类型
        _bstr_t strConnect = "Provider=SQLOLEDB; Server=127.0.0.1;Database=dbtest; uid=lnhv013710; pwd=013710;";
        m_pConnection->Open(strConnect,"","",adModeUnknown);
    }
    // 捕捉异常
    catch(_com_error e)
    {
        // 显示错误信息
        AfxMessageBox(e.Description());
    }
}
#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();
};

展开全部

  • 写回答

2条回答 默认 最新

  • threenewbee 2020-01-18 15:31
    关注

    m_pConnection.CreateInstance("ADODB.Connection");
    这里就应该初始化的。
    m_pConnection调用Close后连接关闭,可以再次Open,不会自动释放或者指针设置为NULL
    不知道你说的第六行是哪个文件的第六行,你也没有标记出行号。如果有别的问题,请留言

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 代写uni代码,app唤醒
  • ¥15 全志t113i启动qt应用程序提示internal error
  • ¥15 ensp可以看看嘛.
  • ¥80 51单片机C语言代码解决单片机为AT89C52是清翔单片机
  • ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
  • ¥15 minist数字识别
  • ¥15 在安装gym库的pygame时遇到问题,不知道如何解决
  • ¥20 uniapp中的webview 使用的是本地的vue页面,在模拟器上显示无法打开
  • ¥15 网上下载的3DMAX模型,不显示贴图怎么办
  • ¥15 关于#stm32#的问题:寻找一块开发版,作为智能化割草机的控制模块和树莓派主板相连,要求:最低可控制 3 个电机(两个驱动电机,1 个割草电机),其次可以与树莓派主板相连电机照片如下:
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部