收藏 分享(赏)

vs2010版本的C++OBDC方式连接数据库(ACCESS和SQL2008).doc

上传人:精品资料 文档编号:8689958 上传时间:2019-07-07 格式:DOC 页数:20 大小:817.60KB
下载 相关 举报
vs2010版本的C++OBDC方式连接数据库(ACCESS和SQL2008).doc_第1页
第1页 / 共20页
vs2010版本的C++OBDC方式连接数据库(ACCESS和SQL2008).doc_第2页
第2页 / 共20页
vs2010版本的C++OBDC方式连接数据库(ACCESS和SQL2008).doc_第3页
第3页 / 共20页
vs2010版本的C++OBDC方式连接数据库(ACCESS和SQL2008).doc_第4页
第4页 / 共20页
vs2010版本的C++OBDC方式连接数据库(ACCESS和SQL2008).doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、VS2010 连接数据库(access 和 sql 2008)现在很多人开始用 VS2010 的 C+了,以前大家都是从 VC6.0 开始使用,对6.0 比较熟悉,网上很多关于连接数据库的方法都是针对 VC6.0 的,很多人用2010 用了一段时间之后不随手就放弃了,继续使用 VC6.0.作者作为一名 VS2010版本开始学习使用的人在数据库连接的时候也遇到很多问题,在这里和大家分享如下:首先是用 ACCESS 方式连接数据库:以前 VC6.0 怎么连接相信大家都能够百度得到了,他是通过首先打开控制面板-管理工具-数据源(ODBC)就到了图一界面:图一然后点击右边的添加按钮:很多书里面都叫添加

2、时候选第二项,也就是图二里面所以深色背景那项:图二Vc6.0 的操作就是这样选择。但在 VS2010 里面就不对。我用的是 VS2010然后用 ACCESS2007 做数据库保留后缀名:accdb如图三图三选择这一项在 VS2010 里面就不会出错了我在这里添加了一个叫:liyixu 的 access 数据库这就配置好了数据源接下来,讲 VS2010 里面怎样连接这个数据库:在 VC6.0 里面是通过添加类的方法来添加数据库里面的具体某一个表。而在 VS2010 里面也差不多。但是当我们按照 VC6.0 添加正常类的时候发现,他没有基类 CRecordset 类可以选择:图四比如:如果选择图四

3、中的 MFC 类图五他里面没有 CRecordset 基类可供选择,也就无从选择数据源和表。那么 VS2010 里面其实是有专门的 ODBC 使用者设置的。选择:图六图六中的 MFC ODBC 使用者选项,不需要输入名称位置,点击添加按钮:图七进入 MFC ODBC 使用者向导:点击数据源按钮,进入选择数据源对话框,把文件数据源视图切换到系统数据源视图:图八选择之前在数据源中定义的 liyixu 用户数据源点击确定出现登陆界面:图九这里我登录名和密码是在添加数据源时在高级选项中设置的,如果你没有设置,当然就没有,直接单击确定按钮就可以连接了图十出现图示界面 我的数据库里面只有一个表会员信息,所

4、以直接选择他,然后单击确定回到向导界面,单击完成,完成连接在这里你可以自定义自己的类的名称:图 十一我在这里就直接以(huiyuaninfo)会员信息为类名了。在图十一中我勾选了绑定所有列 然后就会被卡住程序崩溃,然后不勾选就没有这种情况,如果在前面图九中你设置了登陆名和密码,程序也会发出警告,所有密码出现在代码中,编译也会不成功,这时候把#error 那一行注释掉就行了。这样就能以 ODBC 方式连接上 ACCESS 数据库很清楚吧下面讲一讲怎样连接 SQL 2008 (这个是重点):很多人连接 SQL 失败是数据库配置的问题,权限没有,所以访问被拒绝。这个要从 SQL 2008 的安装说起

5、,由于是一时兴起写这篇文章,所以我就不把自己的数据库卸载了重装了,其实就一个地方。在 SQL 2008 安装过程中,很多教材都叫选择 windows 登陆模式,默认实例。而不管是这里讲的 ODBC 模式连接 SQL 还是 ADO 方式这种比较方便的方式连接都需要登录名和密码。你在单击上做练习的话 当然是不需要什么登录名的了,window 验证,开机就可以用自然很方便,但是其他软件要访问它,必然要给他权限和接口,所以选择混合模式,设置 SQL 登录方式中用户名 sa 的密码。注意:密码一定要复杂不然还通不过。这是其一。二、打开 SQL Server 2008 配置工具-SQL Server 配置

6、管理器。首先确保 sql server 服务开启,然后图 十二我安装的学习版哈,见笑了,设置 SQL Server 网络配置中 SQL EXPRESS 和MSSQLSERVER 中的 TCP/IP 和 Named Pipes 协议的状态为启用,默认是不启用的。设置完成后重启服务就可以了。然后配置 ODBC 数据源:以一个简单实例来说明:学籍管理系统。 打开 SQL Server management Studio以 SQL server 方式连接数据库:图 十三新建数据库 member。在 member 数据库里面创建两个表: user 和 score。我之后会以 ODBC 方式连接 scor

7、e 表设计 score 表:图 十四有上图所示的一些列。然后再自己先编写一些内容:比如:图 十五这是我随意编写的一些信息然后开始同前面设置 ACCESS 数据源一样的操作:这里添加选 SQL Server 选项:图 十六图 十七 服务器选自己的电脑,因为单机练习嘛,最简单了,点击完成。出现图十八所示界面:图 十八你可以单击测试数据源,测试一下,如果照前面的设置进行了的话,连接就会成功,出现如图十九的对话框:图 十九至此,ODBC 的 sql 数据源设置好了:图 二十然后打开 VS2010 新建项目,创建 MFC 对话框程序。在 VS2010 中创建对话框向导没有连接数据源的选项,单文档和多文档

8、是有的。那么先不管,先来设计学籍管理系统的对话框界面如下:图 二十一这个界面,相信学过 MFC 的同学都会做了,然后对相应的变量进行设计。然后创建数据库连接,还是添加类里面选择 ODBC 数据库使用者图 二十二出现数据源选择界面,单击数据源按钮,出现数据源菜单,切换到系统数据源视口,然后选择之前设置的 huiyuaninfo sql 数据库。图 二十三单击确定,出现登陆界面:图 二十四这时候就必须输入 sa 用户和密码, sa 用户的创建在前面说了,要在数据库安装的时候设置,单击确定选择 score 表:图 二十五至此,数据库连接成功然后创建了一个 Cscore 类,然后我们来看看他都有哪些内

9、容:#pragma once/ 代码?生成在 2013年1月?22日?, 10:26class Cscore : public CRecordsetpublic:Cscore(CDatabase* pDatabase = NULL);DECLARE_DYNAMIC(Cscore)CStringW m_stuid;CStringW m_stuname;CStringW m_stuclass;longm_usualscore;longm_testscore;longm_totalscore;public:virtual CString GetDefaultConnect(); / 默?认?连?接字

10、?符?串?virtual CString GetDefaultSQL(); / 记?录?集的?默?认? SQLvirtual void DoFieldExchange(CFieldExchange* pFX); / RFX 支持?/ 实现?#ifdef _DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpContext#endif;VS2010 的注释粘贴到 word 里面会乱码,我也不知道怎么回事,不过这不影响程序的理解,可以看到,这个类定义了六个变量和两个虚函数再看他的源程序:/ score.h : Cscore 类的

11、?实现?/ Cscore 实现?/ 代码?生成在 2013年1月?22日?, 10:26#include “stdafx.h“#include “score.h“IMPLEMENT_DYNAMIC(Cscore, CRecordset)Cscore:Cscore(CDatabase* pdb): CRecordset(pdb)m_stuid = L“;m_stuname = L“;m_stuclass = L“;m_usualscore = 0;m_testscore = 0;m_totalscore = 0;m_nFields = 6;m_nDefaultType = dynaset;/#e

12、rror 安2全?问题a:o连?接字?符?串?可能包含?密码?。/ 此?连?接字?符?串?中D可能包含?明文?密码?和/或其?他?重?要a/ 信?息。请?在查看完此?连?接字?符?串?并找到?所有D与?安2全?/ 有D关?的?问题a后移?除y #error。可能需要a将?此?密码?存?/ 储为a其?他?格?式?或使1用?其?他?的?用?户身份Y验证。CString Cscore:GetDefaultConnect()return _T(“DSN=xuejiguanli;Trusted_Connection=Yes;APP=Microsoftx00ae Visual Studiox00ae 20

13、10;WSID=LIYI;DATABASE=member;Network=DBMSSOCN“);CString Cscore:GetDefaultSQL()return _T(“dbo.score“);void Cscore:DoFieldExchange(CFieldExchange* pFX)pFX-SetFieldType(CFieldExchange:outputColumn);/ RFX_Text() 和 RFX_Int() 这a类宏依赖的?是?/ 成员变?量?的?类型,?而?不?是?数y据Y库a字?段?的?类型。/ ODBC 尝试?自?动将?列D值转a换?为a所请?求的?类型RFX

14、_Text(pFX, _T(“stuid“), m_stuid);RFX_Text(pFX, _T(“stuname“), m_stuname);RFX_Text(pFX, _T(“stuclass“), m_stuclass);RFX_Long(pFX, _T(“usualscore“), m_usualscore);RFX_Long(pFX, _T(“testscore“), m_testscore);RFX_Long(pFX, _T(“totalscore“), m_totalscore);/ Cscore 诊?断?#ifdef _DEBUGvoid Cscore:AssertValid

15、() constCRecordset:AssertValid();void Cscore:Dump(CDumpContext#endif /_DEBUG他把表中的六列和六个变量建立了关系。然后我们就可以通过这六个变量来对数据库进行操作了。下面给出对话框初始化函数里面的代码:BOOL CxuejiDlg:OnInitDialog()CDialogEx:OnInitDialog();/打开a数y据Y集,?建立数y据Y集和对?话框变?量?之?间?的?联a系Cscore m_set;m_set.Open();m_set.MoveFirst();m_stuid=m_set.m_stuid;m_stuna

16、me=m_set.m_stuname;m_testscore=m_set.m_testscore;m_usualscore=m_set.m_usualscore;m_totalscore=m_set.m_totalscore;UpdateData(false);/设置?列D表框的?风?格?DWORD dwExStyle=LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE;m_list.SetExtendedStyle(dwExStyle);m_list.SetTextColor(

17、RGB(255,0,0);m_list.SetBkColor(RGB(240,247,233);/初?始?化列D表 插?入?6列D,?设置?宽度m_list.InsertColumn(0,L“学号?“,LVCFMT_CENTER,65,0);m_list.InsertColumn(1,L“姓?名?“,LVCFMT_CENTER,65,0);m_list.InsertColumn(2,L“班级?“,LVCFMT_CENTER,65,0);m_list.InsertColumn(3,L“平?时成绩“,LVCFMT_CENTER,65,0);m_list.InsertColumn(4,L“期末?成绩

18、“,LVCFMT_CENTER,65,0);m_list.InsertColumn(5,L“总评成绩“,LVCFMT_CENTER,65,0);CString strsql;strsql.Format(L“select * from score order by stuid“);ListAll(strsql);首先建立了一个列表框,然后要通过最后一行的 ListAll 函数来把数据库里面的所有信息显示到列表控件里面来,初始化函数主要写了列表控件的初始化信息。列表控件的使用可以查询 MSDN 有详细的说明。最后来看看 ListAll 函数是怎样实现对数据库的显示的:void CxuejiDlg:

19、ListAll(CString str)m_list.DeleteAllItems();Cscore m_score;/tryif(m_score.IsOpen()m_score.Close();if(!m_score.Open(CRecordset:snapshot,str)MessageBox(L“打开a数y据Y库a失败!?“,L“数y据Y库a错误“,MB_OK);return;catch(CDBException *e)e-ReportError();/int nindex=0;m_score.MoveFirst();CString uscore,tscore,fscore;while(

20、!m_score.IsEOF()LV_ITEM litem;litem.mask=LVIF_TEXT;litem.iItem=nindex;litem.iSubItem=0;litem.pszText=L“;/在最?后一?行D插?入?记?录?m_list.InsertItem(/设置?行D的?其?他?列D值m_list.SetItemText(nindex,0,m_score.m_stuid);m_list.SetItemText(nindex,1,m_score.m_stuname);m_list.SetItemText(nindex,2,m_score.m_stuclass);uscore

21、.Format(L“%3d“,m_score.m_usualscore);tscore.Format(L“%3d“,m_score.m_testscore);fscore.Format(L“%3d“,m_score.m_totalscore);m_list.SetItemText(nindex,3,uscore);m_list.SetItemText(nindex,4,tscore);m_list.SetItemText(nindex,5,fscore);m_score.MoveNext();nindex+;m_score.Close();CDatabase 类和 CRecordset 类都是对于 ODBC 方式连接数据库而设计的,他们的使用方法和结构也都可以通过相关书籍查询,这里不再赘述了。然后让我们来看看执行结果:图 二十六那么可以看见数据库里面的内容就显示到了列表控件里面了。以前也经常查看文库,这次是第一次把自己的经验跟大家分享,希望对大家的学习有所帮助,共勉之!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报