ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:364.90KB ,
资源ID:4432506      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4432506.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(VC++环境下连接SQLServer数据库方法实验六.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

VC++环境下连接SQLServer数据库方法实验六.docx

1、VC+环境下连接SQLServer数据库方法实验六VC+环境下连接SQL Server数据库方法指导实验类型:设计型一、实验环境1Windows XP操作系统;2VC+6.0开发环境;3SQL server 2000数据库管理系统。二、实验内容和要求利用VC开发应用程序,要求能够通过界面完成对数据库中数据的查询、插入、删除以及修改。三、实验原理VC访问SQL Server数据库,常用的方法有两种:通过ODBC连接和通过ADO连接。下面分别介绍一下。采用ODBC方式要求先创建ODBC数据源,应用程序通过数据源与数据库连接;并且在创建应用程序时,只能是基于单文档或多文档,而无法直接创建基于对话框的

2、应用程序。采用ADO方式无需创建数据源,应用程序可通过ADO直接与数据库连接;ADO方式可以创建基于对话框的应用程序。两种方式都要在应用程序中添加代码以完成相应的初始化功能。四、实验步骤下面通过两个例子分别介绍基于ODBC方式和基于ADO方式的实验步骤。1 基于ODBC方式的实验步骤(1)在SQL Server2000中创建数据库student,该数据库中有学生表s用来存放学生信息。s表的结构如下:属性名类型是否为主键允许空备注snochar(8)是学号snamevarchar(10)否姓名ageint否年龄deptchar(4)否所在系号commentvarchar(8)否评语 s表的创建方

3、法在此不详述。(2)创建ODBC数据源 “开始”-“设置”-“控制面板”“管理工具”“数据源(ODBC)”,打开之后出现如图1所示窗口。图1 点击“添加”按钮,出现图2。图2选择SQL Server,点击“完成”,出现图3。图3 名称中填写所创建的数据源的名称,本例中为student,描述可以不填。因为SQL Server的服务器和客户端均安装在本地计算机上,所以服务器为(local)。如果本地计算机上只安装了客户端,服务器安装在另外的机器上,服务器为另一台机器的名称。 点击“下一步”,出现图4。图4SQL Server如何验证ID的真伪,使用哪种方法要看安装SQL Server2000时选择

4、的是哪种验证方式。如果是Windows验证,选择使用网络登录ID的Windows NT验证;如果是混合验证模式则要选择下面一种。本例中采用Windows验证。进入数据库无需另外的用户名和密码。 点击“下一步”,出现图5。图5这里要更改默认的数据库,默认情况下数据源所连接的数据库为master,这里要改为student数据库。 点击“下一步”,出现图6。图6这里无需修改,点击“完成”出现图7。图7 点击“测试数据源”,如果测试成功说明数据源已成功创建。(3)创建VC应用程序。 打开VC+6.0,新建工程,如图8所示。选择MFC AppWizard(exe),工程名为exec1,存放在D盘实验文件

5、夹里。图8 点击“确定”,在出现的窗口中选择“单文档”,点击“下一步”,出现图9。图9这里选择“查看数据库不使用文件支持”,还要选择数据源,点击“数据源”,弹出如图10所示窗口。图10 选择“student”数据源,点击“OK”,在弹出的窗口中选择表dbo.s,点击“OK”返回图9所示的界面。以后的创建步骤中没有需要修改的地方可以直接点击完成。这样工程exec1就创建完成了,并且通过数据源与数据库发生了关联。 创建好的工程可以运行,结果如图11所示。图11(4)界面设计 在工作区左边的树型结构中,选择ResourceView,展开Dialog节点,双击IDD_EXEC1_FORM,打开该对话框

6、。在这里添加所需控件。如图12所示。图12 此时运行程序,结果如图13所示。图13从界面可以看出程序要完成的功能。完整的程序运行后,界面默认显示表中的第一条数据,点击工具栏中的“下一记录”可以显示下一条记录;点击“删除”按钮可将当前显示的数据从库中删除;点击“清除”按钮,将所有编辑框清空;在界面输入学生信息,点击“添加”按钮可将此学生信息输入至数据库;点击“修改”按钮可修改当前显示的学生信息。 为界面上的编辑框和按钮添加变量和函数。在界面右键单击,选择“建立类向导”,弹出如图14所示窗口。图14本例中需要为编辑框IDC_AGE, IDC_COMMENT, IDC_DEPARTMENT, IDC

7、_NAME, IDC_SNO添加变量。以IDC_AGE为例,点击“ADD Variable”弹出如图15所示窗口。图15在下拉框中选择m_pSet-m_age为变量名,这里的变量是与数据库表s中的字段相对应的,变量类型也与s中的字段类型对应。其它变量的添加方法相同。为按钮添加函数比较简单,双击按钮即可。添加的函数在exec1View.cpp文件中。(5)代码设计 “清除”按钮所添加的函数为OnClear(),具体代码如下:/名称:OnClear/功能:清除编辑框中的内容void CExec1View:OnClear() CWnd* c1; c1= CWnd:GetDlgItem(IDC_SNO

8、);/获得编辑框 c1-SetWindowText(); /将编辑框置空 c1= CWnd:GetDlgItem(IDC_NAME); c1-SetWindowText(); c1= CWnd:GetDlgItem(IDC_DEPARTMENT); c1-SetWindowText(); c1= CWnd:GetDlgItem(IDC_AGE); c1-SetWindowText(); c1= CWnd:GetDlgItem(IDC_COMMENT); c1-SetWindowText(); “添加”按钮所添加的函数为OnAdd(),具体代码如下:/名称:OnAdd/功能:插入一条记录void

9、 CExec1View:OnAdd() / TODO: Add your control notification handler code here /判断年龄是否合适 CString strAge; GetDlgItem(IDC_AGE)-GetWindowText(strAge); int nAge = atoi(strAge.GetBuffer(0); if(nAge120) AfxMessageBox(输入的年龄不符合实际!); return; /呈增加状态 m_pSet-AddNew(); UpdateData(); /更新数据库 m_pSet-Update(); /重新获得数据

10、m_pSet-Requery(); UpdateData(FALSE); “删除”按钮所添加的函数为OnDelete(),具体代码如下:/名称:OnDelete/功能:删除当前记录void CExec1View:OnDelete() / TODO: Add your control notification handler code here /发出删除命令 m_pSet-Delete(); /重新获得记录集 m_pSet-Requery(); UpdateData(FALSE); “修改”按钮所添加的函数为OnEdit(),具体代码如下:/名称:OnEdit/功能:修改当前记录void CE

11、xec1View:OnEdit() / TODO: Add your control notification handler code here /判断年龄是否合适 CString strAge; GetDlgItem(IDC_AGE)-GetWindowText(strAge); int nAge = atoi(strAge.GetBuffer(0); if(nAge120) AfxMessageBox(输入的年龄不符合实际!); return; /呈编辑状态 m_pSet-Edit(); UpdateData(); /更新数据库 m_pSet-Update(); /重新获得记录集 m_p

12、Set-Requery(); UpdateData(FALSE); (6)运行结果图162基于ADO方式的实验步骤此例中所用数据库与上例中相同;此例中无需创建数据源。(1)创建VC应用程序 打开VC+6.0,新建工程。选择MFC AppWizard(exe),工程名为exec2,存放在D盘实验文件夹里。点击“确定”,在弹出的窗口中选择“基本对话框”,以后的步骤没有需要修改的地方,可以直接点击“完成。”这样一个基于基本对话框的工程就创建好了。(2)界面设计 在工作区左边的树型结构中,选择ResourceView,展开Dialog节点,双击IDD_EXEC2_DIALOG,打开该对话框。在这里添加

13、所需控件。如图17所示。图17 为编辑框和列表框添加变量。在界面右键单击,选择“建立类向导”,弹出如图18所示窗口。图18本例中需要为编辑框IDC_AGE, IDC_COMMENT, IDC_DEPT, IDC_NAME, IDC_SNO,列表框IDC_LIST添加变量。以IDC_AGE为例,点击“ADD Variable”弹出如图19所示窗口。图19这里变量名为m_age,类型可从下拉框里选。添加变量完成之后类向导如图20所示。图20 为按钮添加函数,双击按钮可为其添加函数,在exec2Dig.cpp文件里。(3)与ADO相关的代码设计 引入ADO库文件,使用ADO前必须在工程的StdAfx

14、.h头文件里用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下所示:/加入ADO支持库#import c:program filescommon filessystemadomsado15.dll no_namespace rename (EOF, adoEOF) 定义ADO连接变量指针,在exec2.h文件的class CExec2App : public CwinApp方法中添加代码如下: / 定义ADO连接变量指针 _ConnectionPtr m_pConnection;该指针为整个应用程序共享,所以放在public下面。 定义ADO连接、命令、记录集变量指针

15、,在exec2Dlg.h文件的class CExec2Dlg : public CDialog方法中添加如下代码: / 定义ADO连接、命令、记录集变量指针 _ConnectionPtr m_pConnection; _CommandPtr m_pCommand; _RecordsetPtr m_pRecordset;该指针为整个应用程序共享,所以放在public下面。 初始化OLE/COM库环境。必须注意的是,ADO库是一组COM动态库,这意味应用程序在调用ADO前,必须初始化OLE/COM库环境。在MFC应用程序里,一个比较好的方法是在应用程序主类的InitInstance成员函数里初始化

16、OLE/COM库环境。在本例中,在exec2.cpp文件的BOOL CExec2App:InitInstance()成员函数里添加如下代码:/初始化COM,创建ADO连接等操作 AfxOleInit(); m_pConnection.CreateInstance(_uuidof(Connection); /在ADO操作中建议语句中要常用try.catch()来捕获错误信息, /因为它有时会经常出现一些想不到的错误 try /打开本地 Sql Server库student m_pConnection-Open(driver=SQL Server; Server=lenovo-pc;Databas

17、e=student;UID=;PWD=, ,adModeUnknown); /Server后是服务器的计算机名,Database后是数据库名/这里使用的windows验证,没有设置用户名和密码, /如果是windows和SQL server混合验证,UID=;PWD=要写入相应的用户名和密码 catch(_com_error e) AfxMessageBox(数据库连接失败!); return FALSE; 在exec2Dlg.cpp文件中添加代码。在#endif下面添加如下代码: extern CExec2App theApp; / 在此引用应用类中的theApp来获取库连接指针在BOOL

18、CExec2Dlg:OnInitDialog()函数中添加如下代码:/ TODO: Add extra initialization here /使用ADO创建数据库记录集 m_pRecordset.CreateInstance(_uuidof(Recordset); / 在ADO操作中建议语句中要常用try.catch()来捕获错误信息, / 因为它有时会经常出现一些想不到的错误 try m_pRecordset-Open(SELECT * FROM s, / 查询s表中所有字段 theApp.m_pConnection.GetInterfacePtr(), / 获取库接库的IDispatc

19、h指针 adOpenDynamic, adLockOptimistic, adCmdText); catch(_com_error *e) AfxMessageBox(e-ErrorMessage(); 至此,与ADO相关的代码都已添加完了。下面在exec2Dlg.cpp文件中添加应用代码。(4)与功能相关的代码设计 在界面上用到列表框,当鼠标点击列表框的某一行时,其中的数据能够在编辑框中显示出来,这要用到列表框的一个函数。添加此函数的方法如下:摁住Ctrl和w键,进入类向导,如图21所示。图21选择IDC_LIST,在右边的Messages下面选择LBN_SELCHANGE,然后点击“Add

20、 Function”按钮,最后点击“确定”按钮,即为列表框添加了此函数。具体代码如下:/名称:OnSelchangeList/功能:当每次选择新的记录时,都会移动指针到新的记录位置并将值显示出来void CExec2Dlg:OnSelchangeList() int curSel = m_list.GetCurSel(); _variant_t var,varIndex; if(curSel MoveFirst(); m_pRecordset-Move(long(curSel); var = m_pRecordset-GetCollect(sname); if(var.vt != VT_NUL

21、L) m_sname = (LPCSTR)_bstr_t(var); var = m_pRecordset-GetCollect(age); if(var.vt != VT_NULL) m_age=(LPCSTR)_bstr_t(var); var = m_pRecordset-GetCollect(sno); if(var.vt != VT_NULL) m_sno = (LPCSTR)_bstr_t(var); var = m_pRecordset-GetCollect(dept); if(var.vt != VT_NULL) m_dept = (LPCSTR)_bstr_t(var); v

22、ar = m_pRecordset-GetCollect(comment); if(var.vt != VT_NULL) m_comment = (LPCSTR)_bstr_t(var); UpdateData(false); catch(_com_error *e) AfxMessageBox(e-ErrorMessage(); 将数据库中的数据显示在列表框中,添加函数ListData()。添加的方法是,在工作区左边的树型结构中,选择ClassView,右键单击CExec2Dlg,在弹出的菜单中选择Add Member Function,出现如图22所示的窗口,类型为void,函数描述为Li

23、stData()。图22此函数的具体代码如下:/名称:ListData/功能:将数据库中的数据显示在列表框中void CExec2Dlg:ListData() _variant_t var; CString strname,strage,strsno,strdept,strcom; /清空列表框 m_list.ResetContent(); strname=strage=strsno=strdept=strcom=; /在ADO操作中建议语句中要常用try.catch()来捕获错误信息, /因为它有时会经常出现一些想不到的错误。 try if(!m_pRecordset-BOF) m_pRec

24、ordset-MoveFirst(); else AfxMessageBox(表内数据为空); return; / 读入库中各字段并加入列表框中 while(!m_pRecordset-adoEOF) var = m_pRecordset-GetCollect(sno); if(var.vt != VT_NULL) strsno = (LPCSTR)_bstr_t(var); var = m_pRecordset-GetCollect(sname); if(var.vt != VT_NULL) strname = (LPCSTR)_bstr_t(var); var = m_pRecordset

25、-GetCollect(age); if(var.vt != VT_NULL) strage = (LPCSTR)_bstr_t(var); var = m_pRecordset-GetCollect(dept); if(var.vt != VT_NULL) strdept = (LPCSTR)_bstr_t(var); var = m_pRecordset-GetCollect(comment); if(var.vt != VT_NULL) strcom = (LPCSTR)_bstr_t(var); m_list.AddString( strsno + - +strname + - +st

26、rage+ - + strdept+ - + strcom); m_pRecordset-MoveNext(); / 默认列表指向第一项,同时移动记录指针并显示 m_list.SetCurSel(0); OnSelchangeList(); catch(_com_error *e) AfxMessageBox(e-ErrorMessage(); 插入按钮对应的函数代码如下:/名称:OnWritedata/功能:将编辑框中输入的学生信息插入到s表中void CExec2Dlg:OnWritedata() UpdateData(); if(m_sname = | m_sno = ) AfxMess

27、ageBox(学号和姓名信息不能为空!); return; /在ADO操作中建议语句中要常用try.catch()来捕获错误信息, /因为它有时会经常出现一些想不到的错误。 try / 写入各字段值 m_pRecordset-AddNew(); m_pRecordset-PutCollect(sno, _variant_t(m_sno); m_pRecordset-PutCollect(sname, _variant_t(m_sname); m_pRecordset-PutCollect(age, atol(m_age); m_pRecordset-PutCollect(dept, _vari

28、ant_t(m_dept); m_pRecordset-PutCollect(comment, _variant_t(m_comment); m_pRecordset-Update(); AfxMessageBox(插入成功!); / 更新显示其库内容 int nCurSel = m_list.GetCurSel(); ListData(); m_list.SetCurSel(nCurSel); / 移动记录指针到新的位置 OnSelchangeList(); catch(_com_error *e) AfxMessageBox(e-ErrorMessage(); 修改按钮对应的函数代码如下:/名称:OnModify/功能:修改学生信息void CExec2Dlg:OnModify() UpdateData(); / 更新对话框数据 if(m_l

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1