• [MFC学习]1.ADO编程——读取数据


    1.新建一个对话框MFC项目,命名为MineGeology。

    2.导入msado15.dll类库,在stdafx.h文件中输入:

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

    用.udl文件设置连接字符串

    3.封装操作ADO的类CADOHelper。

     1 #pragma once
     2 class CADOHelper
     3 {
     4 
     5 public:    
     6     _ConnectionPtr m_pConnection;//_com_ptr_t智能指针
     7     _RecordsetPtr m_pRecordset; 
     8     CString connStr;
     9 public:
    10 
    11     CADOHelper(void);
    12     ~CADOHelper(void);
    13     CString GetConnString();
    14     void SetConnString(CString _conn);
    15     void InitADOConn();
    16     _RecordsetPtr& OpenRecordset(CString sql);
    17     void CloseRecordset();
    18     void CloseConn();
    19     UINT GetRecordCount(_RecordsetPtr pRecordset);
    20 };

    实现文件ADOHelper.cpp

    ADOHelper.CPP
     1 #include "StdAfx.h"
     2 #include "ADOHelper.h"
     3 
     4 
     5 CADOHelper::CADOHelper(void):connStr()
     6 {
     7     
     8 }
     9 CString CADOHelper::GetConnString()
    10 {
    11     return connStr;
    12 }
    13 void CADOHelper::SetConnString(CString _conn)
    14 {
    15     connStr=_conn;
    16 }
    17 CADOHelper::~CADOHelper(void)
    18 {
    19 }
    20 void CADOHelper::InitADOConn()
    21 {
    22     ::CoInitialize(NULL);
    23     try
    24     {
    25         m_pConnection.CreateInstance("ADODB.Connection");
    26         _bstr_t strConn=connStr;
    27         m_pConnection->Open(strConn,"","",adModeUnknown);
    28     }
    29     catch    (_com_error ex)
    30     {
    31         AfxMessageBox(ex.Description());
    32     }
    33 }
    34 _RecordsetPtr& CADOHelper::OpenRecordset(CString sql)
    35 {
    36     ASSERT(!sql.IsEmpty());
    37     try
    38     {
    39         m_pRecordset.CreateInstance(_uuidof(Recordset));
    40         m_pRecordset->Open(_bstr_t(sql),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
    41     }
    42     catch (_com_error e)
    43     {
    44         AfxMessageBox(e.Description());
    45     }
    46     return m_pRecordset;
    47 }
    48 void CADOHelper::CloseRecordset()
    49 {
    50     if (m_pRecordset->GetState()==adStateOpen)
    51     {
    52         m_pRecordset->Close();
    53     }
    54 }
    55 void CADOHelper::CloseConn()
    56 {
    57     m_pConnection->Close();
    58     ::CoUninitialize();
    59 }
    60 UINT CADOHelper::GetRecordCount(_RecordsetPtr pRecordset)
    61 {
    62     int nCount=0;
    63     try
    64     {
    65         pRecordset->MoveFirst();
    66 
    67     }
    68     catch (...)
    69     {
    70         return 0;
    71     }
    72     if (pRecordset->adoBOF)
    73     {
    74         return 0;
    75     }
    76     while(!pRecordset->adoEOF)
    77     {
    78         pRecordset->MoveNext();
    79         nCount++;
    80 
    81     }
    82     pRecordset->MoveFirst();
    83     return nCount;
    84 }

    4.在OnInitDialog方法中添加如下代码,查询并显示用户表的Users数据

     1 m_listctrl.InsertColumn(0,L"ID",LVCFMT_LEFT,130,0);
     2     m_listctrl.InsertColumn(1,L"姓名",LVCFMT_LEFT,130,1);
     3     m_listctrl.InsertColumn(2,L"密码",LVCFMT_LEFT,130,2);
     4     m_listctrl.InsertItem(0,L"");
     5     m_listctrl.SetItemText(0,0,L"guanyu");
     6     m_listctrl.SetItemText(0,1,L"guanyu");
     7     m_listctrl.InsertItem(1,L"");
     8     m_listctrl.SetItemText(1,0,L"guanyu");
     9     m_listctrl.SetItemText(1,1,L"guanyu");
    10     
    11     /*CADOHelper m_pAdoHelper;
    12     m_pAdoHelper.SetConnString(L"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\\我的文档\\Visual Studio 2010\\Projects\\MineGeology\\MineGeology\\AppData\\Geology.mdb;Persist Security Info=False");
    13     m_pAdoHelper.InitADOConn();
    14     CString sql("select * from Users");
    15     m_pAdoHelper.m_pRecordset=m_pAdoHelper.OpenRecordset(sql);
    16     int i=1;
    17     while(!m_pAdoHelper.m_pRecordset->adoEOF)
    18     {
    19         i++;
    20         m_listctrl.InsertItem(0,L"");
    21         m_listctrl.SetItemText(0,0,(_bstr_t)m_pAdoHelper.m_pRecordset->GetCollect("ID"));
    22         m_listctrl.SetItemText(0,1,(_bstr_t)m_pAdoHelper.m_pRecordset->GetCollect("User_Name"));
    23         m_listctrl.SetItemText(0,2,(_bstr_t)m_pAdoHelper.m_pRecordset->GetCollect("Pwd"));
    24         m_pAdoHelper.m_pRecordset->MoveNext();
    25     }
    26     m_pAdoHelper.CloseRecordset();
    27     m_pAdoHelper.CloseConn();*/
    28     CADOHelper* m_pAdoHelper=new CADOHelper();
    29     m_pAdoHelper->SetConnString(L"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\\我的文档\\Visual Studio 2010\\Projects\\MineGeology\\MineGeology\\AppData\\Geology.mdb;Persist Security Info=False");
    30     m_pAdoHelper->InitADOConn();
    31     CString sql("select * from Users");
    32     m_pAdoHelper->m_pRecordset=m_pAdoHelper->OpenRecordset(sql);
    33     int i=1;
    34     while(!m_pAdoHelper->m_pRecordset->adoEOF)
    35     {
    36         i++;
    37         m_listctrl.InsertItem(0,L"");
    38         m_listctrl.SetItemText(0,0,(_bstr_t)m_pAdoHelper->m_pRecordset->GetCollect("ID"));
    39         m_listctrl.SetItemText(0,1,(_bstr_t)m_pAdoHelper->m_pRecordset->GetCollect("User_Name"));
    40         m_listctrl.SetItemText(0,2,(_bstr_t)m_pAdoHelper->m_pRecordset->GetCollect("Pwd"));
    41         m_pAdoHelper->m_pRecordset->MoveNext();
    42     }
    43     m_pAdoHelper->CloseRecordset();
    44     m_pAdoHelper->CloseConn();
    45     delete m_pAdoHelper;

    代码中注释部分为类对象的访问方式,使用中的为动态内存访问方式。

    文章未经说明均属原创,学习笔记可能有大段的引用,一般会注明参考文献。 欢迎大家留言交流,转载请注明出处。
  • 相关阅读:
    浏览器返回错误汇总分析
    黄金投资品种众多 个人如何投资黄金
    .NET设计模式系列文章 (转自TerryLee's Tech Space)
    .NET设计模式(7):创建型模式专题总结(Creational Pattern)
    一个很经典的下拉式菜单(附效果)
    .NET设计模式(16):模版方法(Template Method)
    搜索引擎优化基础(转并整理添加)
    .NET设计模式(18):迭代器模式(Iterator Pattern)
    【ASP.NET】网页中嵌入视频的三种方法
    .NET设计模式(15):结构型模式专题总结
  • 原文地址:https://www.cnblogs.com/yhlx125/p/2797065.html
Copyright © 2020-2023  润新知