利用SQL Server 和MFC实现对数据库的简单管理

工具:SQL Server,VC6.0

步骤如下:

1.建立一个数据库studentinfo,再建立一个表testtable,表设计和初始值如下(仅仅是举个例子,后面操作都是基于此表的):

2.建立ODBC数据源

步骤如下:

1.进入计算机管理工具中的ODBC数据源

2.选择添加用户DSN

选择SQL Server Driver驱动,前提是已安装SQL Server Managemant Studio等相关组件工具

然后填写数据源名称和服务器(localhost表示本机服务器)

然后一直点击下一步直到完成,此时可以看到用户DSN中已经有了刚刚添加的数据源

3.现在打开VC6.0,新建一个对话框工程(命名为ODBC)

在默认对话框中添加控件如下:

注意:列表视图控件设置属性为报表类型Report,如下:

各控件绑定变量如下:

在CODBCDlg类的OnInitDialog()中添加如下代码

m_listctrl.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
                                                 //设置列表视图控件为网格状风格,且为全选状态(鼠标点击某一行表现为全选状态)    
 m_listctrl.InsertColumn(0,"ID",LVCFMT_LEFT,110);//参数分别为字段索引,字段名,对齐方式,像素(每个字段宽度)
 m_listctrl.InsertColumn(1,"姓名",LVCFMT_LEFT,100);
 m_listctrl.InsertColumn(2,"性别",LVCFMT_LEFT,120);
 m_listctrl.InsertColumn(3,"总分",LVCFMT_LEFT,100);
    CString SQL="SELECT * FROM testtable";          //可以通过更改表名达到列出同一数据源中不同表的目的
 ListStuInfo(SQL);                               //列出指定表中所有信息
 SetTimer(1,1,NULL);//计时器
 return TRUE;

然后在新建ODBC记录集类CInfoSet,其基类为CRecordSet

建立方式为点击菜单中的插入,选择新建类

按照如上图设置后点击OK,弹出对话框如下:

ODBC下拉选择刚才的数据源名称DSN为stuinfo,点击OK,然后会弹出一个选择数据表的对话框,选择testtable即可

此时在类视图中可以看见数据库的testtable表中的列名对应的成员变量m_id,m_score,m_name,m_sex

然后添加CODBCDlg 类的成员函数ListStuInfo(CString strSQL),用于在初始化对话框时在列表控件中显示学生信息

注意要在ODBCDlg.cpp文件中添加InfoSet.h头文件

void CODBCDlg::ListStuInfo(CString strSQL)
{
    m_listctrl.DeleteAllItems();                                      //首先删除所有项目
 CInfoSet Infoset;                                                 //创建一个记录集对象
    if(!Infoset.Open(CRecordset::dynaset,strSQL,CRecordset::readOnly))//连接数据源并执行给定的SQL语句
 {
  MessageBox("连接数据源失败!","警告",MB_ICONASTERISK|MB_OK);
  return;
 }
 CString strTemp;
 int i = 0;
 while(!Infoset.IsEOF())
 {
  m_listctrl.InsertItem(i,Infoset.m_id);
  m_listctrl.SetItemText(i,1,Infoset.m_name);
  m_listctrl.SetItemText(i,2,Infoset.m_sex);
  strTemp.Format("%d",Infoset.m_score);                          //将long int转为CString
  m_listctrl.SetItemText(i,3,strTemp);
  Infoset.MoveNext();
  i++;
 }
    Infoset.Close();                                                   //关闭记录集
    UpdateData(FALSE);                                                 //将控件变量值传给对应控件显示
}

至此编译运行会出现错误,原因是没有在stdafx.h头文件添加afxdb.h头文件,因为使用了记录集类

然后再编译运行即可,效果如下:

此时"添加","删除","修改"按钮没有反应,因为还没有为他们添加消息函数

下面开始构建添加,删除,修改模块

添加一个"添加学生信息"对话框资源,如下:

控件绑定变量如下:

双击该对话框的确定按钮为其添加消息函数代码(CStuInfoDlg  即为添加学生信息对话框对应的类)

void CStuInfoDlg::OnOK()
{
 // TODO: Add extra validation here
 UpdateData(TRUE);//将控件值传给控件变量
 MessageBox("添加成功!","提示");
 CDialog::OnOK();
}

在主对话框(CODBCDlg)添加成员变量如下:

双击主对话框添加按钮为其添加消息响应函数如下:

void CODBCDlg::OnAdd()
{
 // TODO: Add your control notification handler code here
 CStuInfoDlg dlg;
 if(dlg.DoModal()!=IDOK)//如果用户没有点击添加对话框的确定按钮则直接返回,函数结束
 {
  return;
 }
 m_newID = dlg.m_addID;
 m_newname = dlg.m_addname;
 m_newsex = dlg.m_addsex;
 m_newscore = dlg.m_addscore;
    CDatabase db;//创建数据库类对象
    if(!db.Open("stuinfo"))//直接连接数据源stuinfo
 {
  MessageBox("连接数据源stuinfo失败!","警告",MB_ICONASTERISK|MB_OK);
  return;
 }
    CString strSQL;
 strSQL.Format("insert into testtable values('%s','%s','%s','%s')",m_newID,m_newname,m_newsex,m_newscore);//编写SQL插入语句
 db.ExecuteSQL(strSQL);//执行SQL语句
 db.Close();//断开与数据源的连接
 ListStuInfo("select * from testtable");//列出表中信息
}
运行效果如下:

添加后列表视图如下:

接着完成修改模块

任然要新建对话框“修改学生信息"

其他操作跟添加差不多

不要忘记添加控件和绑定变量

添加相关代码:

void CODBCDlg::OnModify()
{
 // TODO: Add your control notification handler code here
 int n = m_listctrl.GetSelectionMark();//获得视图列表选择项目的索引
    if(n == -1)                           //为-1表示没有选中任何项
  return;
 m_newID = m_listctrl.GetItemText(n,0);
 m_newname = m_listctrl.GetItemText(n,1);
 m_newsex = m_listctrl.GetItemText(n,2);
 m_newscore = m_listctrl.GetItemText(n,3);
    CModifyDlg dlg;
 dlg.m_ID = m_newID;
 dlg.m_name = m_newname;
 dlg.m_sex = m_newsex;
 dlg.m_score = m_newscore;
 //UpdateData(FALSE);//在修改对话框显示所选中学生信息
 if(dlg.DoModal()!=IDOK)
  return;
 CString strOldName = m_newname;//保存主键数据
 UpdateData(TRUE);
    m_newID = dlg.m_ID;
 m_newname = dlg.m_name;
 m_newsex = dlg.m_sex;
 m_newscore = dlg.m_score;
 CDatabase db;//创建数据库类对象
    if(!db.Open("stuinfo"))//直接连接数据源stuinfo
 {
  MessageBox("连接数据源stuinfo失败!","警告",MB_ICONASTERISK|MB_OK);
  return;
 }
 CString strSQL = "",strTemp;
 strTemp.Format("update testtable set id='%s',name='%s',sex='%s',score='%s' where name='%s' ",m_newID,m_newname,m_newsex,m_newscore,strOldName);
 strSQL+=strTemp;
 db.ExecuteSQL(strSQL);
 MessageBox("修改成功!","提示");
 db.Close();
 ListStuInfo("select * from testtable");
}

运行效果如下:(注意:点击修改按钮前先选择列表控件中的要修改项)

修改后:

最后是删除模块,不需要建立对话框,只需在CODBCDlg添加如下成员函数:

void CODBCDlg::OnDelete()
{
 // TODO: Add your control notification handler code here
 int n = m_listctrl.GetSelectionMark();
 if(n == -1)//没有选中任何项目
 {
  MessageBox("请选中一个项目再点击删除!","提示");
  return;
 }
 m_newname = m_listctrl.GetItemText(n,1);//获取选中项的主键信息name
   CDatabase db;
    if(!db.Open("stuinfo"))
 {
  MessageBox("连接数据源stuinfo失败!","警告",MB_ICONASTERISK|MB_OK);
  return;
 }
 CString strSQL;
 strSQL.Format("delete from testtable where name='%s'",m_newname);
 db.ExecuteSQL(strSQL);
 MessageBox("删除成功!","提示");
 db.Close();
   ListStuInfo("select * from testtable");
}
运行时也要先选择列表控件中的待删除项目

删除后:

为了在主对话框实时获得当前表中记录数,还要添加计时器函数OnTimer(),利用MFC ClassWizard建立该函数,鼠标右键选择MFC ClassWizard

void CODBCDlg::OnTimer(UINT nIDEvent)
{
 // TODO: Add your message handler code here and/or call default
 int count = m_listctrl.GetItemCount();//获取项目数量
 m_count = count;
 UpdateData(FALSE);
 CDialog::OnTimer(nIDEvent);
}

若有不足欢迎指正;若有疑问鄙人也乐于解答,欢迎留言或QQ加群!

欢迎加入QQ群:735472015,群内有VC,MFC,win32API,批处理,python学习资料干货喔

MFC+ODBC+SQL Server+Visual C++的更多相关文章

  1. PowerDesigner反向数据库时遇到[Microsoft][ODBC SQL Server Driver][SQL Server]无法预定义语句。SQLSTATE = 37错误解决方法

    逆向工程中,有时会出现如下错误 ... [Microsoft][ODBC SQL Server Driver][SQL Server]无法预定义语句 SQLSTATE = 37000 解决方案: 1. ...

  2. [Oracle][ODBC SQL Server Driver][SQL Server]对象名 'RECOVER.HS_TRANSACTION_LOG' 无效(转)

    原帖由 qingyun 于 2010-6-21 15:44 发表 在写pl/sql的时候,有个很重要的注意点:比如:begin  update  某个sqlserver的表@dblink名字 .... ...

  3. 连接SQLServer2005失败--[Microsoft][ODBC SQL Server Driver][DBNETLIB]一般性网络错误。请检查网络文档

    连接SQLServer2005失败,错误信息: 错误类型:Microsoft OLE DB Provider for ODBC Drivers (0x80004005)[Microsoft][ODBC ...

  4. [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server 不存在或访问被拒绝

    一般连接sql数据库,IP_connstr="driver={SQL Server}; server=127.0.0.1;database=数据库名字;uid=sa;pwd=密码" ...

  5. 数据库 alert.log 日志中出现 "[Oracle][ODBC SQL Server Wire Protocol driver][SQL Server] 'RECOVER'"报错信息

    现象描述: (1).数据库通过调用透明网络实现分布式事务,但透明网关停用后,失败的分布式事务并未清理. (2).数据库 alert 日志 Thu Sep 06 06:53:00 2018 Errors ...

  6. firedac odbc sql server driver连接占线导致另一个hstmt

    firedac odbc sql server driver连接占线导致另一个hstmt 原因:FDQuery.FetchOptions.Mode=fmOnDemand.好像是为了性能问题,不设置则默 ...

  7. C#调用ODBC连接SQL Server数据库的存储过程

    OdbcConnection con = new OdbcConnection("Driver={SQL Server};server=PC-200201070359;uid=sa;pwd= ...

  8. php连接微软MSSQL(sql server)完全攻略

    http://www.jb51.net/article/98364.htm php连接微软MSSQL(sql server)完全攻略 作者:吵吵 字体:[增加 减小] 类型:转载 时间:2016-11 ...

  9. OGG-00782 - OGG 11.2.1.0.2 FOR Windows x64 Microsoft SQL Server

    OS ENV:主机名:           WIN-NO42QRNPMFAOS 名称:          Microsoft Windows Server 2008 R2 Datacenter OS ...

随机推荐

  1. Git学习-Git时光机之版本回退(二)

    Git,是Linus花了两周时间用C写的一个分布式版本控制系统.牛人该怎么定义? 零.结论先行 倒叙总结一下: HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git ...

  2. 系统变量 %USERPROFILE%

    可以用CMD的SET命令来查看现有的系统变量,“="前的部分用%括起来就是.   常用: %USERPROFILE% =C:\Users\用户名 %SystemRoot% =C:\WINDO ...

  3. 目前比较全的CSS重设(reset)方法总结(转)

    原文地址 在当今网页设计/开发实践中,使用CSS来为语义化的(X)HTML标记添加样式风格是重要的关键.在设计师们的梦想中都存在着这样的一个完美世界:所有的浏览器都能够理解和适用多有CSS规则,并且呈 ...

  4. Oracle基础之Merge into

    Merge into语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句. 通过MERGE语句,根据一张表或多表联合查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDA ...

  5. Postfix的工作原理

    传统的Sendmail将所有功能都集中在同一个程序里,这种结构我们称之为“单体式设计”(monolithic).Postfix采用专职负责的策略,不同的功能分别交由不同的专门程序处理,这种结构称为“模 ...

  6. Build 2016: 发布明天的云创新来服务今天的开发者

    每个企业和行业都在被云潜移默化地改变着.随着云计算的速度.规模和灵活性的不断增加,云服务带来的可能性也在不断被拓展.想象一下,通过监测传感器,一位奶农能够将他的奶牛牛奶产量提高:或是一家医院能够自动监 ...

  7. Python学习---进程 1225

    进程创建 进程创建: 第一种:直接创建 第二种:利用类来实现 第一种:直接创建 from multiprocessing import Process import time def f(name): ...

  8. 美国加拿大著名公共知识分子简·雅各布斯 (Jane Jacobs)的5本书

    作者是美国.加拿大著名公共知识分子.最近看了她的三本书<城市经济><城市与国家财富><经济的本质>.出版社把这三本书归入“城市-经济”三部曲,三本书英文原版的出版日 ...

  9. NODE-环境变量的配置(踩坑总结)

    初学Node.js,从官网下载了node.js的Windows Installer,安装完成后,通过控制台输入node命令,发现提示说“node"不是内部或外部命令,这通常是由于没有设置环境 ...

  10. 薄弱的交互页面之新浪微博到博客的储存型xss漏洞

    首先分享一片博文到微博,然后 在微博评论xss code 最后回到博客点击举报就触发xss了 点击举报 Xss之2 首先还是分享一片博文到微博,然后评论xsscode 回到我的博客个人中心,查看评论 ...