【注意】

VS2019取消了之前老版本的SQL数据库向导。因此需要像VS2019以前版本一样操作数据库,就要单独写一个继承于CRecordset的类来完成向数据库添加数据、删除数据、更新数据、数据排序、数据过滤等操作。

【继承类CDataBaseRec.h】

#pragma once
#include<afxdb.h>
class CDataBaseRec : public CRecordset
{
public:CDataBaseRec(CDatabase* pDatabase = NULL);CString     mb_Name;CString     mb_PassWord;CString     mb_UserType;
public:virtual CString GetDefaultConnect(); virtual CString GetDefaultSQL();    virtual void DoFieldExchange(CFieldExchange* pFX);
};

【继承类CDataBaseRec.cpp】

#include "pch.h"
#include "CDataBaseRec.h"
CDataBaseRec::CDataBaseRec(CDatabase* pdb) :CRecordset(pdb)
{mb_Name = L"";mb_PassWord = L"";mb_UserType = L"";m_nFields = 3;m_nDefaultType = dynaset;
}CString CDataBaseRec::GetDefaultConnect()
{return _T("ODBC;DSN=记录集;UID=账户;PWD=密码");//根据自己数据库连接属性填写}
CString CDataBaseRec::GetDefaultSQL()
{return _T("[Student]");
}
void CDataBaseRec::DoFieldExchange(CFieldExchange* pFX)
{pFX->SetFieldType(CFieldExchange::outputColumn);RFX_Text(pFX, _T("[UserName]"), mb_Name);RFX_Text(pFX, _T("[UserPassWord]"), mb_PassWord);RFX_Text(pFX, _T("[UserType]"), mb_UserType);
}

【应用程序H文件】


#include"CDataBaseRec.h"
#include<afxdb.h>
#pragma onceclass CMFCApplicationSqlDemoDlg : public CDialogEx
{public:CMFCApplicationSqlDemoDlg(CWnd* pParent = nullptr);    #ifdef AFX_DESIGN_TIMEenum { IDD = IDD_MFCAPPLICATIONSQLDEMO_DIALOG };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX);    public:CDatabase    CLogo;CDataBaseRec *CUserTable;protected:HICON m_hIcon;virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()
public:CString m_User;CString m_PassWord;afx_msg void OnBnClickedButton1();CString m_UserType;afx_msg void OnBnClickedButton2();afx_msg void OnBnClickedButton4();afx_msg void OnBnClickedButton3();afx_msg void OnBnClickedButton5();afx_msg void OnBnClickedButton6();afx_msg void OnBnClickedButton7();afx_msg void OnBnClickedButton8();afx_msg void OnBnClickedButton9();
};

【应用程序CPP文件】


#include "pch.h"
#include "framework.h"
#include "MFCApplicationSqlDemo.h"
#include "MFCApplicationSqlDemoDlg.h"
#include "afxdialogex.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endifclass CAboutDlg : public CDialogEx
{
public:CAboutDlg();#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_ABOUTBOX };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX);   protected:DECLARE_MESSAGE_MAP()
};CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
}void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);
}BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()CMFCApplicationSqlDemoDlg::CMFCApplicationSqlDemoDlg(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_MFCAPPLICATIONSQLDEMO_DIALOG, pParent), m_User(_T("")), m_PassWord(_T("")), m_UserType(_T(""))
{m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);CUserTable = nullptr;
}void CMFCApplicationSqlDemoDlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT1, m_User);DDX_Text(pDX, IDC_EDIT2, m_PassWord);DDX_Text(pDX, IDC_EDIT3, m_UserType);
}BEGIN_MESSAGE_MAP(CMFCApplicationSqlDemoDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1, &CMFCApplicationSqlDemoDlg::OnBnClickedButton1)ON_BN_CLICKED(IDC_BUTTON2, &CMFCApplicationSqlDemoDlg::OnBnClickedButton2)ON_BN_CLICKED(IDC_BUTTON4, &CMFCApplicationSqlDemoDlg::OnBnClickedButton4)ON_BN_CLICKED(IDC_BUTTON3, &CMFCApplicationSqlDemoDlg::OnBnClickedButton3)ON_BN_CLICKED(IDC_BUTTON5, &CMFCApplicationSqlDemoDlg::OnBnClickedButton5)ON_BN_CLICKED(IDC_BUTTON6, &CMFCApplicationSqlDemoDlg::OnBnClickedButton6)ON_BN_CLICKED(IDC_BUTTON7, &CMFCApplicationSqlDemoDlg::OnBnClickedButton7)ON_BN_CLICKED(IDC_BUTTON8, &CMFCApplicationSqlDemoDlg::OnBnClickedButton8)ON_BN_CLICKED(IDC_BUTTON9, &CMFCApplicationSqlDemoDlg::OnBnClickedButton9)
END_MESSAGE_MAP()BOOL CMFCApplicationSqlDemoDlg::OnInitDialog()
{CDialogEx::OnInitDialog();ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != nullptr){BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}SetIcon(m_hIcon, TRUE);     SetIcon(m_hIcon, FALSE);    ShowWindow(SW_SHOWMAXIMIZED);/*if (!CLogo.Open(_T("LogOn"), FALSE, FALSE, L"ODBC;"))*/if (!CLogo.Open(NULL, FALSE, FALSE, _T("ODBC;DSN=LogON;UID=用户名;PWD=密码"))){MessageBox(_T("数据库连接失败!"),_T("信息提示:"),MB_OK|MB_OKCANCEL|MB_ICONERROR);}else{MessageBox(_T("数据库连接成功!"), _T("信息提示:"), MB_OK | MB_OKCANCEL |MB_ICONINFORMATION);CUserTable = new CDataBaseRec(&CLogo);CUserTable->Open(CRecordset::dynaset, _T("SELECT UserName,UserPassWord ,UserType FROM CUserDataBase"));if (!CUserTable->IsOpen()){MessageBox(_T("数据集打开失败!"), _T("信息提示:"), MB_OK | MB_OKCANCEL | MB_ICONERROR);}else{MessageBox(_T("数据集打开成功!"), _T("信息提示:"), MB_OK | MB_OKCANCEL | MB_ICONINFORMATION);CUserTable->MoveFirst();m_User = CUserTable->mb_Name;m_PassWord = CUserTable->mb_PassWord;m_UserType = CUserTable->mb_UserType;UpdateData(FALSE);}}return TRUE;
}void CMFCApplicationSqlDemoDlg::OnSysCommand(UINT nID, LPARAM lParam)
{if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialogEx::OnSysCommand(nID, lParam);}
}void CMFCApplicationSqlDemoDlg::OnPaint()
{if (IsIconic()){CPaintDC dc(this); SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;dc.DrawIcon(x, y, m_hIcon);}else{CDialogEx::OnPaint();}
}HCURSOR CMFCApplicationSqlDemoDlg::OnQueryDragIcon()
{return static_cast<HCURSOR>(m_hIcon);
}void CMFCApplicationSqlDemoDlg::OnBnClickedButton1()
{if (CUserTable->IsOpen()){CUserTable->MoveNext();if (CUserTable->IsEOF()){CUserTable->MoveFirst();}m_User = CUserTable->mb_Name;m_PassWord = CUserTable->mb_PassWord;m_UserType = CUserTable->mb_UserType;UpdateData(FALSE);}else{MessageBox(_T("数据集打开失败!"), _T("信息提示:"), MB_OK | MB_OKCANCEL | MB_ICONERROR);}}void CMFCApplicationSqlDemoDlg::OnBnClickedButton2()
{if (CUserTable->IsOpen()){CUserTable->MovePrev();if (CUserTable->IsBOF()){CUserTable->MoveLast();}m_User = CUserTable->mb_Name;m_PassWord = CUserTable->mb_PassWord;m_UserType = CUserTable->mb_UserType;UpdateData(FALSE);}else{MessageBox(_T("数据集打开失败!"), _T("信息提示:"), MB_OK | MB_OKCANCEL | MB_ICONERROR);}}void CMFCApplicationSqlDemoDlg::OnBnClickedButton4()
{if (CUserTable->IsOpen()){if (!CUserTable->IsEOF()){CUserTable->MoveLast();CUserTable->AddNew();CUserTable->SetFieldNull(NULL);UpdateData(TRUE);CUserTable->mb_Name = m_User;CUserTable->mb_PassWord = m_PassWord;CUserTable->mb_UserType = m_UserType;if (CUserTable->CanUpdate()){CUserTable->Update();UpdateData(FALSE);MessageBox(_T("数据记录添加成功!"), _T("信息提示:"), MB_OK | MB_OKCANCEL | MB_ICONINFORMATION);}}}else{MessageBox(_T("数据集打开失败!"), _T("信息提示:"), MB_OK | MB_OKCANCEL | MB_ICONERROR);}
}void CMFCApplicationSqlDemoDlg::OnBnClickedButton3()
{if (CUserTable->IsOpen()){if (!CUserTable->IsEOF())CUserTable->Edit();{UpdateData(TRUE);CUserTable->mb_Name = m_User;CUserTable->mb_PassWord = m_PassWord;CUserTable->mb_UserType = m_UserType;if (CUserTable->CanUpdate()){CUserTable->Update();UpdateData(FALSE);MessageBox(_T("数据记录修改成功!"), _T("信息提示:"), MB_OK | MB_OKCANCEL | MB_ICONINFORMATION);}}}else{MessageBox(_T("数据集打开失败!"), _T("信息提示:"), MB_OK | MB_OKCANCEL | MB_ICONERROR);}
}void CMFCApplicationSqlDemoDlg::OnBnClickedButton5()
{if (!CUserTable->IsEOF()){CUserTable->Delete();CUserTable->Requery();UpdateData(FALSE);MessageBox(_T("数据记录删除成功!"), _T("信息提示:"), MB_OK | MB_OKCANCEL | MB_ICONINFORMATION);}else{MessageBox(_T("数据集打开失败!"), _T("信息提示:"), MB_OK | MB_OKCANCEL | MB_ICONERROR);}}void CMFCApplicationSqlDemoDlg::OnBnClickedButton6()
{if (!CUserTable->IsEOF()){CUserTable->m_strFilter.Format(_T("UserType!=%s"),_T("5"));CUserTable->Requery();UpdateData(FALSE);MessageBox(_T("数据记录过滤成功!"), _T("信息提示:"), MB_OK | MB_OKCANCEL | MB_ICONINFORMATION);}else{MessageBox(_T("数据集打开失败!"), _T("信息提示:"), MB_OK | MB_OKCANCEL | MB_ICONERROR);}
}void CMFCApplicationSqlDemoDlg::OnBnClickedButton7()
{if (!CUserTable->IsEOF()){CUserTable->m_strFilter = _T("");CUserTable->Requery();UpdateData(FALSE);MessageBox(_T("数据记录过滤已取消!"), _T("信息提示:"), MB_OK | MB_OKCANCEL | MB_ICONINFORMATION);}else{MessageBox(_T("数据集打开失败!"), _T("信息提示:"), MB_OK | MB_OKCANCEL | MB_ICONERROR);}
}void CMFCApplicationSqlDemoDlg::OnBnClickedButton8()
{CUserTable->m_strSort = L"UserName";CUserTable->Requery();UpdateData(FALSE);MessageBox(_T("数据记录根据UserType升序排续完成!"), _T("信息提示:"), MB_OK | MB_OKCANCEL | MB_ICONINFORMATION);
}void CMFCApplicationSqlDemoDlg::OnBnClickedButton9()
{CUserTable->m_strSort = L"UserName desc";CUserTable->Requery();UpdateData(FALSE);MessageBox(_T("数据记录根据UserType降序排续完成!"), _T("信息提示:"), MB_OK | MB_OKCANCEL | MB_ICONINFORMATION);
}

VS2019 MFC ODBC 操作SQL SERVER 数据库相关推荐

  1. C++中使用ODBC连接SQL Server数据库

    文章目录 整体总结 ODBC连接 一个修改别人的整体的例子 整体总结 用odbc过时了,还是使用ado吧,易用,高效率,不用配置odbc数据源,易维护,实际项目已从odbc中改用了ado,请看我的这篇 ...

  2. 使用C语言来操作SQL SERVER数据库

    本文转自                         http://simpledev.iteye.com/blog/339537 1.使用C语言来操作SQL SERVER数据库,采用ODBC开放 ...

  3. python3连接sql server数据库_Python3操作SQL Server数据库(实例讲解)

    1.前言 前面学完了SQL Server的基本语法,接下来学习如何在程序中使用sql,毕竟不能在程序中使用的话,实用性就不那么大了. 2.最基本的SQL查询语句 python是使用pymssql这个模 ...

  4. C#操作SQL Server数据库

    C#操作SQL Server数据库 1.概述 2.连接字符串的写法 3.SqlConnection对象 4.SqlCommand对象 5.SqlDataReader对象 6.DataSet对象 7.释 ...

  5. python调用sql数据库_Python3操作SQL Server数据库(实例讲解)

    1.前言 前面学完了SQL Server的基本语法,接下来学习如何在程序中使用sql,毕竟不能在程序中使用的话,实用性就不那么大了. 2.最基本的SQL查询语句 python是使用pymssql这个模 ...

  6. Excel VBA通过ADO连接、操作SQL Server数据库的自定义函数

    网上大多数有关VBA连接.操作SQL Server数据库的教程,大多是把连接字串.SQL语句.执行过程全写在一个过程中了,当一个VBA项目需要做大量的查询.更新数据时,显然这种方法并不合适,以下代码是 ...

  7. 使用c语言操作sql server数据库

    本文使用c语言来对sql server数据库进行操作,实现通过程序来对数据库进行增删改查操作. 操作系统:windows 10         实验平台:vs2012  +  sql server 2 ...

  8. Java操作SQL Server数据库

    //首先导入sql server2008的jar包:sqljdbc4.jar,注意在一般的电脑上即使做了这样的操作仍然是吧不能连接上SQL Server 2008的,如果想连上SQL SQLSERVE ...

  9. c++访问数据库代码示例 occi_使用Python操作SQL Server数据库

    先说一下SQL Server 如果有条件可以使用远程连接或者TeamViewer等工具,操作带GUI的数据库管理器,实施起来可以很省心.可以直接查看结果,模板化查询甚至提示语句错误等. 如果是使用li ...

最新文章

  1. jenkins获取远程服务器文件,Jenkins用SSH传输文件到远程服务器
  2. python open文件安全隐患_python的其他安全隐患
  3. dagger2的初次使用
  4. python归一化 增大差异_Python逻辑回归模型原理及实际案例应用
  5. antd 选择文件夹_antd 手动上传文件
  6. 【网络基础】《TCP/IP详解》学习笔记2
  7. Redis教程:数据对象分析(二)
  8. 20181102_WCF简单双工
  9. 修饰器 TypeError: A() missing 1 required positional argument: ‘func‘
  10. python图片添加文字
  11. ImageSpan 不显示或者变小
  12. 天翼云,不要来,千万不要来!开始统计工时,安装监控软件,减少福利!
  13. 清北学堂noip2019集训D6——动态规划
  14. CISP证书有什么用
  15. 《数据库系统原理》教学上机实验报告
  16. springcloud + nacos多环境联调、本地联调(即灰度版本)
  17. hist = np.histogram(image, bins=256, range=(0,255))[0]含义
  18. 作业一:我与软件工程相约
  19. 【报告分享】2021人工智能行业分析研究报告:投资人角度.pdf(附下载链接)...
  20. 众昂矿业刘金海:关于萤石的形态

热门文章

  1. 指导应届生,毕业1两年程序员面试,指导简历,教学习编程
  2. 不动点迭代以及其收敛性
  3. 网络收敛是什么意思_收敛是什么意思(什么是收敛性)
  4. E/WindowManager: android.view.WindowLeaked: Activity com.xxx.xxx.xxx has leaked window com.android.i
  5. 牛血清白蛋白BSA:蛋白定量检测标准品
  6. 棋盘放芝麻:有一个棋盘,有64个方格,在第一个方格里面放1粒芝麻重量是0.00001kg,第二个里面放2粒,第三个里面放4,棋盘上放的所有芝麻的重量(代码)
  7. python爬虫(6)——Selenium的使用
  8. 实战Vue:基于Vue的移动端购物商城
  9. 为什么你需要辞职了?——辞职的十大理由
  10. 一个超赞的智慧园区地图导航解决方案,如何实现园区路线导航?