最新精选vs最新版本的C++OBDC方式连接数据库ACCESS和SQL.docx
- 文档编号:30336264
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:24
- 大小:783.66KB
最新精选vs最新版本的C++OBDC方式连接数据库ACCESS和SQL.docx
《最新精选vs最新版本的C++OBDC方式连接数据库ACCESS和SQL.docx》由会员分享,可在线阅读,更多相关《最新精选vs最新版本的C++OBDC方式连接数据库ACCESS和SQL.docx(24页珍藏版)》请在冰豆网上搜索。
最新精选vs最新版本的C++OBDC方式连接数据库ACCESS和SQL
vs2021版本的C++OBDC方式连接数据库(ACCESS和SQL2021)
VS2021连接数据库(access和sql2021)
现在很多人开始用VS2021的C++了,以前大家都是从VC6.0开始使用,对6.0比较熟悉,网上很多关于连接数据库的方法都是针对VC6.0的,很多人用2021用了一段时间之后不随手就放弃了,继续使用VC6.0.作者作为一名VS2021版本开始学习使用的人在数据库连接的时候也遇到很多问题,在这里和大家分享如下:
首先是用ACCESS方式连接数据库:
以前VC6.0怎么连接相信大家都能够XX得到了,他是通过首先打开控制面板->管理工具->数据源(ODBC)
就到了图一界面:
图一
然后点击右边的添加按钮:
很多书里面都叫添加时候选第二项,也就是图二里面所以深色背景那项:
图二
Vc6.0的操作就是这样选择。
但在VS2021里面就不对。
我用的是VS2021
然后用ACCESS2021做数据库保留后缀名:
accdb
如图三
图三
选择这一项在VS2021里面就不会出错了
我在这里添加了一个叫:
liyixu的access数据库
这就配置好了数据源
接下来,讲VS2021里面怎样连接这个数据库:
在VC6.0里面是通过添加类的方法来添加数据库里面的具体某一个表。
而在VS2021里面也差不多。
但是当我们按照VC6.0添加正常类的时候发现,他没有基类CRecordset类可以选择:
图四
比如:
如果选择图四中的MFC类
图五
他里面没有CRecordset基类可供选择,也就无从选择数据源和表。
那么VS2021里面其实是有专门的ODBC使用者设置的。
选择:
图六
图六中的MFCODBC使用者选项,不需要输入名称位置,点击添加按钮:
图七
进入MFCODBC使用者向导:
点击数据源按钮,进入选择数据源对话框,把文件数据源视图切换到系统数据源视图:
图八
选择之前在数据源中定义的liyixu用户数据源
点击确定
出现登陆界面:
图九
这里我登录名和密码是在添加数据源时在高级选项中设置的,如果你没有设置,当然就没有,直接单击确定按钮就可以连接了
图十
出现图示界面我的数据库里面只有一个表会员信息,所以直接选择他,然后单击确定
回到向导界面,单击完成,完成连接
在这里你可以自定义自己的类的名称:
图十一
我在这里就直接以(huiyuaninfo)会员信息为类名了。
在图十一中我勾选了绑定所有列然后就会被卡住程序崩溃,然后不勾选就没有这种情况,如果在前面图九中你设置了登陆名和密码,程序也会发出警告,所有密码出现在代码中,编译也会不成功,这时候把#error那一行注释掉就行了。
这样就能以ODBC方式连接上ACCESS数据库
很清楚吧
下面讲一讲怎样连接SQL2021(这个是重点):
很多人连接SQL失败是数据库配置的问题,权限没有,所以访问被拒绝。
这个要从SQL2021的安装说起,由于是一时兴起写这篇文章,所以我就不把自己的数据库卸载了重装了,其实就一个地方。
在SQL2021安装过程中,很多教材都叫选择windows登陆模式,默认实例。
而不管是这里讲的ODBC模式连接SQL还是ADO方式这种比较方便的方式连接都需要登录名和密码。
你在单击上做练习的话当然是不需要什么登录名的了,window验证,开机就可以用自然很方便,但是其他软件要访问它,必然要给他权限和接口,所以选择混合模式,设置SQL登录方式中用户名sa的密码。
注意:
密码一定要复杂不然还通不过。
这是其一。
二、打开SQLServer2021配置工具->SQLServer配置管理器。
首先确保sqlserver服务开启,然后
图十二
我安装的学习版哈,见笑了,设置SQLServer网络配置中SQLEXPRESS和MSSQLSERVER中的TCP/IP和NamedPipes协议的状态为启用,默认是不启用的。
设置完成后重启服务就可以了。
然后配置ODBC数据源:
以一个简单实例来说明:
学籍管理系统。
打开SQLServermanagementStudio
以SQLserver方式连接数据库:
图十三
新建数据库member。
在member数据库里面创建两个表:
user和score。
我之后会以ODBC方式连接score表
设计score表:
图十四
有上图所示的一些列。
然后再自己先编写一些内容:
比如:
图十五
这是我随意编写的一些信息
然后开始同前面设置ACCESS数据源一样的操作:
这里添加选SQLServer选项:
图十六
图十七
服务器选自己的电脑,因为单机练习嘛,最简单了,点击完成。
出现图十八所示界面:
图十八
你可以单击测试数据源,测试一下,如果照前面的设置进行了的话,连接就会成功,出现如图十九的对话框:
图十九
至此,ODBC的sql数据源设置好了:
图二十
然后打开VS2021新建项目,创建MFC对话框程序。
在VS2021中创建对话框向导没有连接数据源的选项,单文档和多文档是有的。
那么先不管,先来设计学籍管理系统的对话框界面如下:
图二十一
这个界面,相信学过MFC的同学都会做了,然后对相应的变量进行设计。
然后创建数据库连接,还是添加类里面选择ODBC数据库使用者
图二十二
出现数据源选择界面,单击数据源按钮,出现数据源菜单,切换到系统数据源视口,然后选择之前设置的huiyuaninfosql数据库。
图二十三
单击确定,出现登陆界面:
图二十四
这时候就必须输入sa用户和密码,sa用户的创建在前面说了,要在数据库安装的时候设置,单击确定
选择score表:
图二十五
至此,数据库连接成功
然后创建了一个Cscore类,然后我们来看看他都有哪些内容:
#pragmaonce
//代䨲码?
生¦¨²成¨¦在¨²2021年¨º1月?
22日¨?
10:
26
classCscore:
publicCRecordset
{
public:
Cscore(CDatabase*pDatabase=NULL);
DECLARE_DYNAMIC(Cscore)
CStringWm_stuid;
CStringWm_stuname;
CStringWm_stuclass;
longm_usualscore;
longm_testscore;
longm_totalscore;
public:
virtualCStringGetDefaultConnect();//默?
认¨?
连¢?
接¨®字Á?
符¤?
串ä?
virtualCStringGetDefaultSQL();//记?
录?
集¡¥的Ì?
默?
认¨?
SQL
virtualvoidDoFieldExchange(CFieldExchange*pFX);//RFX支¡ì持?
//实º¦Ì现?
#ifdef_DEBUG
virtualvoidAssertValid()const;
virtualvoidDump(CDumpContext&dc)const;
#endif
};
VS2021的注释粘贴到word里面会乱码,我也不知道怎么回事,不过这不影响程序的理解,可以看到,这个类定义了六个变量和两个虚函数
再看他的源程序:
//score.h:
Cscore类¤¨¤的Ì?
实º¦Ì现?
//Cscore实º¦Ì现?
//代䨲码?
生¦¨²成¨¦在¨²2021年¨º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;
}
//#error安ã2全¨?
问¨º题¬a:
êo连¢?
接¨®字Á?
符¤?
串ä?
可¨¦能¨¹包㨹含?
密¨¹码?
。
¡ê
//此ä?
连¢?
接¨®字Á?
符¤?
串ä?
中D可¨¦能¨¹包㨹含?
明¡Â文?
密¨¹码?
和¨ª/或¨°其?
他?
重?
要°a
//信?
息¡é。
¡ê请?
在¨²查¨¦看¡ä完ª¨º此ä?
连¢?
接¨®字Á?
符¤?
串ä?
并¡é找¨°到Ì?
所¨´有®D与®?
安ã2全¨?
//有®D关?
的Ì?
问¨º题¬a后¨®移°?
除y#error。
¡ê可¨¦能¨¹需¨¨要°a将?
此ä?
密¨¹码?
存ä?
//储ä¡é为a其?
他?
格?
式º?
或¨°使º1用®?
其?
他?
的Ì?
用®?
户¡ì身¦¨ª份¤Y验¨¦证¡è。
¡ê
CStringCscore:
:
GetDefaultConnect()
{
return_T("DSN=xuejiguanli;Trusted_Connection=Yes;APP=Microsoft\x00aeVisualStudio\x00ae2021;WSID=LIYI;DATABASE=member;Network=DBMSSOCN");
}
CStringCscore:
:
GetDefaultSQL()
{
return_T("[dbo].[score]");
}
voidCscore:
:
DoFieldExchange(CFieldExchange*pFX)
{
pFX->SetFieldType(CFieldExchange:
:
outputColumn);
//RFX_Text()和¨ªRFX_Int()这a类¤¨¤宏¨º依°¨¤赖¤¦Ì的Ì?
是º?
//成¨¦员¡À变À?
量¢?
的Ì?
类¤¨¤型¨ª,ê?
而?
不?
是º?
数ºy据Y库a字Á?
段?
的Ì?
类¤¨¤型¨ª。
¡ê
//ODBC尝¡é试º?
自Á?
动¡¥将?
列¢D值¦Ì转Áa换?
为a所¨´请?
求¨®的Ì?
类¤¨¤型¨ª
RFX_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_DEBUG
voidCscore:
:
AssertValid()const
{
CRecordset:
:
AssertValid();
}
voidCscore:
:
Dump(CDumpContext&dc)const
{
CRecordset:
:
Dump(dc);
}
#endif//_DEBUG
他把表中的六列和六个变量建立了关系。
然后我们就可以通过这六个变量来对数据库进行操作了。
下面给出对话框初始化函数里面的代码:
BOOLCxuejiDlg:
:
OnInitDialog()
{
CDialogEx:
:
OnInitDialog();
//打䨰开a数ºy据Y集¡¥,ê?
建¡§立¢¡é数ºy据Y集¡¥和¨ª对?
话¡ã框¨°变À?
量¢?
之?
间?
的Ì?
联¢a系¦Ì
Cscorem_set;
m_set.Open();
m_set.MoveFirst();
m_stuid=m_set.m_stuid;
m_stuname=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表À¨ª框¨°的Ì?
风¤?
格?
DWORDdwExStyle=LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE;
m_list.SetExtendedStyle(dwExStyle);
m_list.SetTextColor(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"期¨²末?
成¨¦绩¡§",LVCFMT_CENTER,65,0);
m_list.InsertColumn(5,L"总Á¨¹评¨¤成¨¦绩¡§",LVCFMT_CENTER,65,0);
CStringstrsql;
strsql.Format(L"select*fromscoreorderbystuid");
ListAll(strsql);
首先建立了一个列表框,然后要通过最后一行的ListAll函数来把数据库里面的所有信息显示到列表控件里面来,初始化函数主要写了列表控件的初始化信息。
列表控件的使用可以查询MSDN有详细的说明。
最后来看看ListAll函数是怎样实现对数据库的显示的:
voidCxuejiDlg:
:
ListAll(CStringstr)
{
m_list.DeleteAllItems();
Cscorem_score;
//
try
{
if(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();
}
//
intnindex=0;
m_score.MoveFirst();
CStringuscore,tscore,fscore;
while(!
m_score.IsEOF())
{
LV_ITEMlitem;
litem.mask=LVIF_TEXT;
litem.iItem=nindex;
litem.iSubItem=0;
litem.pszText=L"";
//在¨²最Á?
后¨®一°?
行D插?
入¨?
记?
录?
m_list.InsertItem(&litem);
//设¦¨¨置?
行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.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方式连接数据库而设计的,他们的使用方法和结构也都可以通过相关书籍查询,这里不再赘述了。
然后让我们来看看执行结果:
图二十六
那么可以看见数据库里面的内容就显示到了列表控件里面了。
以前也经常查看文库,这次是第一次把自己的经验跟大家分享,希望对大家的学习有所帮助,共勉之!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 精选 vs 版本 OBDC 方式 连接 数据库 ACCESS SQL