VC++环境下连接SQLServer数据库方法指导实验课时:4课时实验类型:设计型实验方式:集中一、实验环境1.WindowsXP操作系统;2.VC++6.0开发环境;3.SQLserver2000数据库管理系统。二、实验内容和要求利用VC开发应用程序,要求能够通过界面完成对数据库中数据的查询、插入、删除以及修改。三、实验原理VC访问SQLServer数据库,常用的方法有两种:通过ODBC连接和通过ADO连接。下面分别介绍一下。采用ODBC方式要求先创建ODBC数据源,应用程序通过数据源与数据库连接;并且在创建应用程序时,只能是基于单文档或多文档,而无法直接创建基于对话框的应用程序。采用ADO方式无需创建数据源,应用程序可通过ADO直接与数据库连接;ADO方式可以创建基于对话框的应用程序。两种方式都要在应用程序中添加代码以完成相应的初始化功能。四、实验步骤下面通过两个例子分别介绍基于ODBC方式和基于ADO方式的实验步骤。1基于ODBC方式的实验步骤(1)在SQLServer2000中创建数据库student,该数据库中有学生表s用来存放学生信息。s表的结构如下:属性名类型是否为主键允许空备注snochar(8)是学号snamevarchar(10)否√姓名ageint否√年龄deptchar(4)否√所在系号commentvarchar(8)否√评语s表的创建方法在此不详述。(2)创建ODBC数据源“开始”--〉“设置”--〉“控制面板”—〉“管理工具”—〉“数据源(ODBC)”,打开之后出现如图1所示窗口。1图1点击“添加”按钮,出现图2。图2选择SQLServer,点击“完成”,出现图3。图3名称中填写所创建的数据源的名称,本例中为student,描述可以不填。因为SQLServer的服务器和客户端均安装在本地计算机上,所以服务器为(local)。如果本地计算机上只安装了客户端,服务器安装在另外的机器上,服务器为另一台机器的名称。点击“下一步”,出现图4。2图4SQLServer如何验证ID的真伪,使用哪种方法要看安装SQLServer2000时选择的是哪种验证方式。如果是Windows验证,选择使用网络登录ID的WindowsNT验证;如果是混合验证模式则要选择下面一种。本例中采用Windows验证。进入数据库无需另外的用户名和密码。点击“下一步”,出现图5。图5这里要更改默认的数据库,默认情况下数据源所连接的数据库为master,这里要改为student数据库。点击“下一步”,出现图6。图6这里无需修改,点击“完成”出现图7。3图7点击“测试数据源”,如果测试成功说明数据源已成功创建。(3)创建VC应用程序。打开VC++6.0,新建工程,如图8所示。选择MFCAppWizard(exe),工程名为exec1,存放在D盘实验文件夹里。图8点击“确定”,在出现的窗口中选择“单文档”,点击“下一步”,出现图9。图9这里选择“查看数据库不使用文件支持”,还要选择数据源,点击“数据源…”,弹出如图10所示窗口。4图10选择“student”数据源,点击“OK”,在弹出的窗口中选择表dbo.s,点击“OK”返回图9所示的界面。以后的创建步骤中没有需要修改的地方可以直接点击完成。这样工程exec1就创建完成了,并且通过数据源与数据库发生了关联。创建好的工程可以运行,结果如图11所示。图11(4)界面设计在工作区左边的树型结构中,选择ResourceView,展开Dialog节点,双击IDD_EXEC1_FORM,打开该对话框。在这里添加所需控件。如图12所示。图12此时运行程序,结果如图13所示。5下一记录图13从界面可以看出程序要完成的功能。完整的程序运行后,界面默认显示表中的第一条数据,点击工具栏中的“下一记录”可以显示下一条记录;点击“删除”按钮可将当前显示的数据从库中删除;点击“清除”按钮,将所有编辑框清空;在界面输入学生信息,点击“添加”按钮可将此学生信息输入至数据库;点击“修改”按钮可修改当前显示的学生信息。为界面上的编辑框和按钮添加变量和函数。在界面右键单击,选择“建立类向导”,弹出如图14所示窗口。图14本例中需要为编辑框IDC_AGE,IDC_COMMENT,IDC_DEPARTMENT,IDC_NAME,IDC_SNO添加变量。以IDC_AGE为例,点击“ADDVariable”弹出如图15所示窗口。图156在下拉框中选择m_pSet-m_age为变量名,这里的变量是与数据库表s中的字段相对应的,变量类型也与s中的字段类型对应。其它变量的添加方法相同。为按钮添加函数比较简单,双击按钮即可。添加的函数在exec1View.cpp文件中。(5)代码设计“清除”按钮所添加的函数为OnClear(),具体代码如下://名称:OnClear//功能:清除编辑框中的内容voidCExec1View::OnClear(){CWnd*c1;c1=CWnd::GetDlgItem(IDC_SNO);//获得编辑框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//功能:插入一条记录voidCExec1View::OnAdd(){//TODO:Addyourcontrolnotificationhandlercodehere//判断年龄是否合适CStringstrAge;GetDlgItem(IDC_AGE)-GetWindowText(strAge);intnAge=atoi(strAge.GetBuffer(0));if(nAge0||nAge120){AfxMessageBox(输入的年龄不符合实际!);return;}//呈增加状态m_pSet-AddNew();UpdateData();//更新数据库m_pSet-Update();//重新获得数据m_pSet-Requery();UpdateData(FALSE);7}“删除”按钮所添加的函数为OnDelete(),具体代码如下://名称:OnDelete//功能:删除当前记录voidCExec1View::OnDelete(){//TODO:Addyourcontrolnotificationhandlercodehere//发出删除命令m_pSet-Delete();//重新获得记录集m_pSet-Requery();UpdateData(FALSE);}“修改”按钮所添加的函数为OnEdit(),具体代码如下://名称:OnEdit//功能:修改当前记录voidCExec1View::OnEdit(){//TODO:Addyourcontrolnotificationhandlercodehere//判断年龄是否合适CStringstrAge;GetDlgItem(IDC_AGE)-GetWindowText(strAge);intnAge=atoi(strAge.GetBuffer(0));if(nAge0||nAge120){AfxMessageBox(输入的年龄不符合实际!);return;}//呈编辑状态m_pSet-Edit();UpdateData();//更新数据库m_pSet-Update();//重新获得记录集m_pSet-Requery();UpdateData(FALSE);}(6)运行结果89图162基于ADO方式的实验步骤此例中所用数据库与上例中相同;此例中无需创建数据源。(1)创建VC应用程序打开VC++6.0,新建工程。选择MFCAppWizard(exe),工程名为exec2,存放在D盘实验文件夹里。点击“确定”,在弹出的窗口中选择“基本对话框”,以后的步骤没有需要修改的地方,可以直接点击“完成。”这样一个基于基本对话框的工程就创建好了。(2)界面设计在工作区左边的树型结构中,选择ResourceView,展开Dialog节点,双击IDD_EXEC2_DIALOG,打开该对话框。在这里添加所需控件。如图17所示。图17为编辑框和列表框添加变量。在界面右键单击,选择“建立类向导”,弹出如图18所示窗口。图18本例中需要为编辑框IDC_AGE,IDC_COMMENT,IDC_DEPT,IDC_NAME,IDC_SNO,列表框IDC_LIST添加变量。以IDC_AGE为例,点击“ADDVariable”弹出如图19所示窗口。10图19这里变量名为m_age,类型可从下拉框里选。添加变量完成之后类向导如图20所示。图20为按钮添加函数,双击按钮可为其添加函数,在exec2Dig.cpp文件里。(3)与ADO相关的代码设计引入ADO库文件,使用ADO前必须在工程的StdAfx.h头文件里用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下所示://加入ADO支持库#importc:\programfiles\commonfiles\system\ado\msado15.dll\no_namespace\rename(EOF,adoEOF)定义ADO连接变量指针,在exec2.h文件的classCExec2App:publicCwinApp方法中添加代码如下://定义ADO连接变量指针_ConnectionPtrm_pConnection;该指针为整个应用程序共享,所以放在public下面。定义ADO连接、命令、记录集变量指针,在exec2Dlg.h文件的classCExec2Dlg:publicCDialog方法中添加如下代码://定义ADO连接、命令、记录集变量指针_ConnectionPtrm_pConnection;_CommandPtrm_pCommand;11_RecordsetPtrm_pRecordset;该指针为整个应用程序共享,所以放在public下面。初始化OLE/COM库环境。必须注意的是,ADO库是一组COM动态库,这意味应用程序在调用ADO前,必须初始化OLE/COM库环境。在MFC应用程序里,一个比较好的方法是在应用程序主类的InitInstance成员函数里初始化OLE/COM库环境。在本例中,在exec2.cpp文件的BOOLCExec2App::InitInstance()成员函数里添加如下代码://初始化COM,创建ADO连接等操作AfxOleInit();m_pConnection.CreateInstance(__uuidof(Connection));//在ADO操作中建议语句中要常用try...catch()来捕获错误信息,//因为它有时会经常出现一些想不到的错误try{//打开本地SqlServer库studentm_pConnection-Open(driver={SQLServer};Server=lenovo-pc;Database=student;UID=;PWD=,,,adModeUnknown);//Server后是服务器的计算机名,Database后是数据库名//这里使用的windows验证,没有设置用户名和密码,//如果是windows和SQLserver混合验证,UID=;PWD=要写入相应的用户名和密码}catch(_com_errore){AfxMessageBox(数据库连接失败!);returnFALSE;}在exec2Dlg.cpp文件中添加代码。在#endif下面添加如下代码:externCExec2A