当前位置:文档之家› VC++6.0入门第九章连接数据库

VC++6.0入门第九章连接数据库

VC++6.0入门第九章连接数据库
VC++6.0入门第九章连接数据库

第九章 连接数据库

微机在商业上的应用主要在数据处理,要求能够快速方便地访问一个大型数据库中的记录, MFC 提供了两种独立地面向用户的数据库访问系统,一种是ODBC (Open DataBase Connectivity ,开放数据库连接),另一种是DAO (Data Access Objects ,数据访问对象)。本章你将学会使用ODBC 和DAO 连接数据库,并能够简单地操作数据库数据。

9.1 MFC ODBC 连接数据库

ODBC 是微软公司支持开放数据库服务体系的重要组成部分,它定义了一组规范,提供了一组对数据库访问的标准API ,这些API 是建立在标准化版本SQL (Structed Query Language ,结构化查询语言)基础上的。ODBC 位于应用程序和具体的DBMS 之间,目的是能够使应用程序端不依赖于任何DBMS ,与不同数据库的操作由对应的DBMS 的ODBC 驱动程序完成。

9.1.1 ODBC 的构成

ODBC 的结构如图9-1所示。

图9-1 使用ODBC 的层次图

ODBC 层由三个部件构成: 1. ODBC 管理器

ODBC 管理器的主要任务是管理安装ODBC 驱动程序,管理数据源。应用程序要访问数据库,首先必须在ODBC 管理器中创建一个数据源。ODBC 管理器根据数据源提供的数据库存储位置,类型及ODBC 驱动程序信息,建立起ODBC 与一个特定数据库之间的联系,接下来,程序中只需提供数据源名,ODBC 就能连接相关的数据库。ODBC 管理器位于系统控件面板中。 2. 驱动程序管理器

驱动器管理器位于ODBC32.DLL ,是ODBC 中最重要的部件,应用程序通过ODBC API 执行数据库操作。其实ODBC API 不能直接操作数据库,需要通过驱动管理器调用特定的数据库的驱动程序,驱动程序在执行完相应操作后,再将结果通过驱动程序管理器返回。驱动器管理器支持一个应用程序同时

应用程序 数据源DSN

ODBC API

(SQL)

ODBC 管理器

驱动程序 管理器

ODBC 驱动程序

据 源

ODBC 层

访问多个DBMS中的数据。

3.ODBC驱动程序

ODBC驱动程序以DLL文件形式出现,提供ODBC与数据库之间的接口。

9.1.2 MFC ODBC类

进行ODBC编程,有三个非常重要的元素:环境(Enviroment),连接(Connection)和语句(Statement),它们都是通过句柄来访问的。在MFC的类库中,CDatabase类封装了ODBC编程的连接句柄,CRecordset 类封装了对ODBC编程的语句句柄,而环境句柄被保存在一个全局变量中,可以调用一个全局函数AfxGetHENV来获得当前被MFC使用的环境句柄。

此外CRecordView类负责记录集的用户界面,CFieldExchange负责CRedordset类与数据源的数据交换。

使用AppWizard生成应用程序框架过程中,只要选择了相应的数据库支持选项,你就能够很方便地获得一个数据库应用程序的框架。

1.CDatabase类

CDatabase类的主要功能是建立与ODBC数据源的连接,连接句柄放在其数据成员m_hdbc中,并提供一个成员函数GetConnect()用于获取连接字符串。要建立与数据源的连接,首先创建一个CDatabase 对象,再调用CDatabase类的Open()函数创建连接。Open()函数的原型定义如下:

virtul BOOL Open(LPCTSTR lpszDSN,BOOL bExclusive=FALSE,

BOOL bReadOnly=FALSE,

LPCTSTR lpszConnect=”ODBC;”,BOOL bUseCursorLib=TRUE);

其中:

lpszDSN指定数据源名,若lpszDSN的值为NULL时,在程序执行时会弹出数据源对话框,供用户选择一个数据源。

lpszConnect指定一个连接字符串,连接字符串中通常包括数据源名、用户ID、口令等信息,与特定的DBMS相关。

例如:

CDatabase db;

db.Open(NULL,FALSE,FALSE,”ODBC;DSN=HotelInfo;UID=SYSTEM;PWD=123456”);

从断开与一个数据源的连接,可以调用CDatabase类的成员函数Close()。

2.CRecordset类

CRecordset类对象表示从数据源中抽取出来的一组记录集。CRecordset类封装了大量操作数据库的函数,支持查询,存取,更新数据库操作。

记录集主要分为两种类型:

(1)快照(Snapshot)记录集

快照记录集相当于数据库的一张静态视图,一旦从数据库抽取出来,当别的用户更新记录的操作是不会改变记录集,只有调用Requry()函数重新查询数据,才能反映数据的变化。自身用户的添加记录操作重要调用Requry()函数重新查询数据,但快照集能反应自身用户的删除和修改操作。

(2)动态(Dynaset)记录集

动态(Dynaset)记录集与快照记录集恰恰相反,是数据库的动态视图。当别的用户更新记录时,动态记录集能即时反映所作的修改。在一些实时系统中必须采用动态记录集,如火车标联网购票系统。但别的用户添加记录,也需要调用Requry()函数重新查询数据后才能反映出来。

CRecordset有六个重要的数据成员如表9-1所示.。

表9-1 CRecordset 类的数据成员

数据成员类型说明

m_strFilter CString 筛选条件字符串

m_strSort CString 排序关键字字符串

m_pDatabase CDatabase类指针指向CDatabasec对象的指针

m_hstmt HSTMT ODBC语句句柄

m_nField UINT 记录集中字段数据成员总数

m_nParams UINT 记录集中参数数据成员总数

CRecordset的主要成员函数如表9-2 所示:

表9-2 CRecordset类的成员函数

成员函数类型

Move 当前记录指针移动若干个位置

MoveFirst 当前记录指针移动到记录集第一条记录

MoveLast 当前记录指针移动到记录集最后一条记录

MoveNext 当前记录指针移动到记录集下一条记录

MovePrev 当前记录指针移动到记录集前一条记录

SetAbsolutePosition 当前记录指针移动到记录集特定一条记录

AddNew 添加一条新记录

Delete 删除一条记录

Edit 编辑一条记录

Update 更新记录

CancelUpdate 取消一条记录的更新操作

Requry 重新查询数据源

GetDefaultConnect 获得默认连接字符串

GetDefaultSQL 获得默认SQL语句

DoFieldExchange 记录集中字段数据成员与数据源中交换数据

GetRecordCount 获得记录集记录个数

IsEOF 判断当前记录指针是否在最后一个记录之后

IsBOF 判断当前记录指针是否在第一个记录之前

CanUpdate 判断记录集是否允许更新

3.CRecordView类

CRecordView类是CFormView的派生类,支持以控件视图来显示当前记录,并提供移动记录的默认菜单和工具栏,用户可以通过记录视图方便地浏览、修改、删除和添加记录。记录视图与对话框一样使用DDX数据交换机制在视图中的控件的记录集成员之间交换数据,只需使用ClassWizard将控件与记录集的字段数据成员一一绑定。

CRecordView的主要函数如表9-3所示:

表9-3 CRecordView类的主要成员函数

成员函数类型

OnGetRecordset 获得指向记录集的指针

OnMove 当前记录指针移动时,OnMove()函数更新对当前记录

所作的修改,这是将更新记录保存的方式。

IsOnFirstRecord 判断当前记录是否为记录集的第一条记录

IsOnLastRecord 判断当前记录是否为记录集的最后一条记录

4.CFieldExchange类

CFieldExchange类支持记录字段数据的自动交换,实现记录集中字段数据成员与相应的数据源中字段之间的数据交换,类似于对话框数据自动交换机制。

9.2数据库应用程序的实现

9.2.1 创建并注册数据源

在创建数据库应用程序之前,先要准备好数据源。下面我们假设数据库应用程序要连接的数据库hotel.mdb存放在C盘根目录下,该数据库下有一张TblCustomer的表,如图9-2所示:

图9-2 数据表“tblCustomer”

在Windows操作系统的控制面板中,可以找到数据源ODBC管理器的图标,如图9-3所示为windows XP homeEditon中的ODBC的图标,它的位置在控制面板中的管理工具文件夹。由于所要连接的数据库是由Microsoft ACCESS创建,要求ODBC管理器中安装有Microsoft ACCESS的ODBC驱动程序。一般,只需安装了Microsoft ACCESS软件,相应的ODBC驱动程序就已经默认安装了。

图9-3 ODBC图标

鼠标双击ODBC图标,弹出“ODBC数据源管理器”对话框,如图9-4所示。

图9-4 ODBC数据源管理器

在用户DSN、系统DSN、文件DSN标签页中都可以创建一个数据源,但所创建的数据源的应用范围是不同的:

(1)用户DSN: 用户数据源只对当前用户可见,而且只能用于当前机器上。

(2)系统DSN:系统数据源对当前机器上的所有用户可见。

(3)文件DSN:文件数据源可以由安装了相同驱动程序的用户共享。

可以根据所创建的数据源的不同的应用场合选择在不同的标签页下创建数据源,在本例中选择系统DSN。在标签页中的列表中显示的是在本机已创建的系统数据源的列表。

单击“Add”按钮,新建一个数据源,弹出“创建新数据源”对话框。如图9-5所示,在ODBC驱动程序列表中选择“Microsoft Access Driver(*.mdb)”。

图9-5 选择ODBC驱动程序类别

单击“Finish”按钮,弹出“ODBC Microsoft Access安装”对话框,如图9-6所示。在数据源名文本框中填入:HotelInfo,单击“选择”按钮,弹出“选择数据库”对话框,如图9-7所示,选择数据库文件c:\hotel.mdb,连续单击“OK”按钮回到前一对话框。

图9-6 设置Microsoft Access数据源

图9-7 选择数据库

最后在系统DSN标签中可以看到创建的数据源HotelInfo出现在数据源列表中,如图9-8所示。

图9-8 创建好的系统数据源

9.2.2创建数据库应用框架

〖例9-1〗使用AppWizard可以方便地得到一个数据库应用程序的框架,创建一个MFC EXE应用程序Exam9_1,在向导的第2步中,选择单选项“Database view without file support”,如图9-9所示。

图9-9 设置数据库支持

单击“Data Source”按钮,弹出“Data Options”对话框,选择单选项ODBC,并在下拉框中选择事先建立好的数据源“HotelInfo”,如图9-10所示。

图9-10选择ODBC数据源

单击“OK”按钮,弹出“Select Database Tables”对话框,列表框中列出了HotelInfo数据库中所包含的表和查询,选择应用程序所操作的表tblCustomer,如图9-11所示。

图9-11 选择数据库表

单击“OK”按钮,结束数据源的设置工作,在图9-9中“Data Source”按钮的下方会出现数据源的选择信息。

单击“Finish”按钮,完成数据库应用程序框架的创建,编译运行这个程序,运行结果如图9-12所示。应用程序包含了数据库记录基本操作菜单和工具按钮,视图是一个对话框,可以添加控件。

图9-12 数据库应用程序框架运行效果

选择工作区的ClassView,展开类树,进一步观察AppWizard自动添加的与数据库支持有关的内容。

增加了一个CExam9_1Set类,该类代表从HotelInfo中选择的一组记录集。程序可以选择一个表作为一个记录集,本例选择了表tblCustomer中的记录构建记录集,也可以选择一个查询的结果集作为一个记录集。

如程序清单9-1所示。CExam9_1Set构造函数用于创建一个记录集对象,并把一个CDatabase对象的指针作为参数传递给构造函数,以便获得已由CDatabase对象建立起来的与数据源的连接。

CExam9_1Set类的成员函数GetDefaultConnect()用于获得定义了数据源类型和数据源名的连接字符串。GetDefaulltSQL()函数中定义了定义SQL语句的字符串,本例的SQL语句定义了查询一张表的完整记录。

CExam9_1Set类中定义了与数据源表的字段相对应的数据成员,成员函数DoFieldExchange()完成记录集上的字段数据成员与数据源上当前记录对应列之间数据的自动交换。

程序清单9-1:CExam9_1Set类

class CExam9_1Set : public CRecordset

{

public:

CExam9_1Set(CDatabase* pDatabase = NULL);

DECLARE_DYNAMIC(CExam9_1Set)

// Field/Param Data

//{{AFX_FIELD(CExam9_1Set, CRecordset)

long m_CustomerID;

CString m_LastName;

CString m_FirstName;

CString m_HomeCountry;

CString m_HomeState;

CString m_PhoneNumber;

CString m_Comments;

//}}AFX_FIELD

// Overrides

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CExam9_1Set)

public:

virtual CString GetDefaultConnect(); // Default connection string

virtual CString GetDefaultSQL(); // default SQL for Recordset

virtual void DoFieldExchange(CFieldExchange* pFX); // RFX support //}}AFX_VIRTUAL

// Implementation

#ifdef _DEBUG

virtual void AssertValid() const;

virtual void Dump(CDumpContext& dc) const;

#endif

};

CExam9_1Set::CExam9_1Set(CDatabase* pdb)

: CRecordset(pdb)

{

//{{AFX_FIELD_INIT(CExam9_1Set)

m_CustomerID = 0;

m_LastName = _T("");

m_FirstName = _T("");

m_HomeCountry = _T("");

m_HomeState = _T("");

m_PhoneNumber = _T("");

m_Comments = _T("");

m_nFields = 7;

//}}AFX_FIELD_INIT

m_nDefaultType = snapshot;

}

CString CExam9_1Set::GetDefaultConnect()

{

return _T("ODBC;DSN=HotelInfo");

}

CString CExam9_1Set::GetDefaultSQL()

{

return _T("[tblCustomer]");

}

void CExam9_1Set::DoFieldExchange(CFieldExchange* pFX)

{

//{{AFX_FIELD_MAP(CExam9_1Set)

pFX->SetFieldType(CFieldExchange::outputColumn);

RFX_Long(pFX, _T("[CustomerID]"), m_CustomerID);

RFX_Text(pFX, _T("[LastName]"), m_LastName);

RFX_Text(pFX, _T("[FirstName]"), m_FirstName);

RFX_Text(pFX, _T("[HomeCountry]"), m_HomeCountry);

RFX_Text(pFX, _T("[HomeState]"), m_HomeState);

RFX_Text(pFX, _T("[PhoneNumber]"), m_PhoneNumber);

RFX_Text(pFX, _T("[Comments]"), m_Comments);

//}}AFX_FIELD_MAP

}

视图类CExam9_1View 是CRecordView的派生类,CRecordView是记录视图,支持在控件中显示数据库记录。默认提供了移动记录功能的实现(第一个,上一个,下一个,最后一个)。定义了一个指向记录集的指针m_pSet。

CRecordView类是CFormView类的派生类,CFormView类的视图对应一个对话框资源,所以CRecordView类从基类中继承的成员函数中最重要的是DoDataExchange()函数和UpdateData()函数,DoDataExchange()函数实现记录集的字段与视图中控件之间的自动数据交换,UpdateData()函数实现记录集的字段与视图中控件之间实时交换。

9.2.3 设计记录操作界面

〖例9-2〗打开资源管理器的Dialog文件夹,选择IDD_EXAM9_1_FORM,在对话框中按图9-13添加

静态控件和编辑框控件,设置ID编辑框的属性为只读。

图9-13 记录操作界面

并按表9-4所示,修改编辑框控件的ID属性。

表9-4 记录操作界面控件属性

控件ID 控件类型标题

静态文本控件ID

IDC_CustomerID 编辑框控件

静态文本控件名

IDC_LastName 编辑框控件

静态文本控件姓

IDC_FirstName 编辑框控件

静态文本控件国家

IDC_HomeCountry 编辑框控件

静态文本控件电话

IDC_PhoneCall 编辑框控件

静态文本控件备注

IDC_Comments 编辑框控件

接下来,要将编辑框控件与一个记录集字段数据成员绑定,打开ClassWizard,选择MemberVariables 标签页,为编辑框控件映射记录集字段数据成员,单击“Add Variable”,弹出“Add Member Variable”对话框,在下拉框中选择由m_pSet指针所指向的记录集字段数据成员。如图9-14所示,为控件IDC_Comments选择绑定的变量为m_pSet->m_Comments。设置完毕如图9-15所示。

图9-14 为视图控件绑定记录集字段数据成员

图9-15 所有控件ID与记录集的绑定

单击“OK”按钮,完成设置,重新运行程序,运行结果如图9-16所示。使用移动记录的四个工具按钮,前后浏览每一条记录,当移动到第一条记录时,“第一条”和“上一条”按钮变灰,当移动到最后一条记录时,“最后一条”和“下一条”按钮变灰。

在浏览记录的过程中,你可以修改各个编辑框中的内容,紧接着作一次移动记录操作,所作的修改就能被保存到数据库中。

图9-16 增加了浏览功能后的应用程序

9.2.4 更新记录

更新记录操作包括修改,添加和删除记录,CRecordSet类提供了AddNew()、Delete()、Edit()、Update()、CancelUpdate()、Requery()等成员函数用于更新记录。

AddNew()函数用于添加一个新的空记录,所有字段数据成员的值都为NULL。Delete()函数用于删除当前记录,Edit()函数用于修改当前记录各字段数据成员的值。Update()函数用于AddNew和Edit操作后的数据的最后保存,CancelUpdate()函数用于取消任何由AddNew和Edit操作产生的待处理的更新。Requery()函数用于重新执行对记录集的查询,当记录集类型是快照型时,快照不反映用户添加的记录,这时需要调用该函数重新查询更新后的记录集。

下面在Exam9_1中增加添加新记录和删除记录的功能。

〖例9-3〗在“record”记录下添加三个菜单项如下图图9-17所示。一个菜单项是分割线,另外两个菜单项分别是“增加记录”和“删除记录”。菜单ID设置为ID_RECORD_ADD和ID_RECORD_DELETE。

图9-17 增加菜单项

使用ClassWizard在视图类为菜单项ID_RECORD_ADD和ID_RECORD_DELETE映射COMMAND 消息处理函数,得到成员函数OnRecordAdd()和OnRecordDelete()。

添加CExam9_1View的BOOL类数据成员m_addflg,用以记录是否进入添加模式,当m_addflg的值为true时,进入添加模式。在CExam9_1View的构造函数中初始化m_addflg的值为false。

为成员函数OnRecordAdd()添加代码,增加一条空记录,并清除ID编辑框的只读属性。实现代码如程序清单9-2所示。

程序清单9-2:Add Record 菜单消息处理函数

void CExam9_1View::OnRecordAdd()

{

// TODO: Add your command handler code here

m_pSet->AddNew();//进入添加模式

m_addflg=true;//设置添加模式标志

CEdit* m_pCtrl=(CEdit*)GetDlgItem(IDC_CustomerID);

m_pCtrl->SetReadOnly(false); //清除ID编辑框的只读属性

UpdateData(false); //用新记录的字段数据成员值更新控件显示

}

使用ClassWizard添加CExam9_1View类的虚函数OnMove()函数,并在OnMove()函数中添加代码,通过移动记录将添加的新记录保存到表中。实现代码如程序清单9-3所示

程序清单9-3:OnMove()函数

BOOL CExam9_1View::OnMove(UINT nIDMoveCommand)

{

// TODO: Add your specialized code here and/or call the base class

if(m_addflg)//添加模式处理

{ m_addflg=false;

UpdateData(true);//使用控件值更新记录集字段数据成员

if(m_pSet->CanUpdate() )//将记录集更新保存到表中

m_pSet->Update();

m_pSet->Requery();//重新查询记录集

UpdateData(false);//以更新后的记录集数据成员更新控件显示

CEdit* m_pCtrl=(CEdit*)GetDlgItem(IDC_CustomerID);

m_pCtrl->SetReadOnly(true); //设置ID编辑框为只读

return true;

}

else

return CRecordView::OnMove(nIDMoveCommand);

}

为成员函数OnRecordDelete()添加代码,删除当前记录,实现代码如程序清单9-4所示。

程序清单9-4:Delete Record菜单处理函数

void CExam9_1View::OnRecordDelete()

{

// TODO: Add your command handler code here

m_pSet->Delete();//删除当前记录

m_pSet->MoveNext();//移到下一记录

if(m_pSet->IsEOF() )//删除记录为最后一条记录处理

m_pSet->MoveLast();

if(m_pSet->IsBOF() )//删空记录集处理

m_pSet->SetFieldNull(NULL);

UpdateData(false);//更新控件显示

}

9.2.5 排序和筛选

CRecordView类有两个重要的数据成员m_strFilter和m_strSort,m_strFilter是用于表示筛选记录的条件字符串,m_strSort是用于表示排序的关键字的字符串。只要对这两个数据成员赋值,只能实现排序和筛选。

〖例9-3〗首先在应用程序Exam9_1中建立两类排序,每一类是按ID号排序,另一类是按HomeCountry 排序。

在“查看”菜单下添加三个菜单项:一条分隔线、“按ID排序”和“按国家排序”,菜单项ID设置为ID_VIEW_SORT_ID和ID_VIEW_SORT_COUNTRY。使用ClassWizard为两个菜单项在视图类中映射COMMAND消息处理函数得到,添加代码如程序清单9-5所示,实现排序。

程序清单9-5:实现排序的函数

void CExam9_1View::OnViewSortId()

{

// TODO: Add your command handler code here

m_pSet->m_strSort="CustomerID";// 定义排序关键字按ID排序

m_pSet->Requery() ;// 重新查询

UpdateData(false); //更新控件显示

}

void CExam9_1View::OnViewSortCountry()

{

// TODO: Add your command handler code here

m_pSet->m_strSort="HomeCountry";

m_pSet->Requery() ;

UpdateData(false);

}

接着添加筛选条件,在一个对话框中输入一个国别,则只显示属于该国别的顾客记录。步骤如下:

(1)创建一个对话框,并添加控件,如图9-18所示。设置编辑框的ID为IDC_FILTER.。为该对话

对话框添加一个新的对话框类CFilterDlg并使用ClassWizard为编辑框IDC_FILTER在对话框类CFilterDlg中添加一个Ctring类型的成员变量m_Filter。

图9-18 筛选对话框

(2)在“查看”菜单下添加一个新的菜单项“筛选”,菜单项ID设为ID_VIEW_FLITER,使用

ClassWizard在CExam9_1View类中为菜单项ID_VIEW_FILTER映射菜单处理函数,得到函数OnViewFilter()。

(3)在CExam9_1View类的实现文件中使用include命令包含“FilterDlg.h”文件,并在函数

OnViewFilter()中添加代码,调用筛选对话框,并按对话框返回的字符串设置数据成员m_strFilter 的值,实现筛选。若对话框返回空串,显示整个记录集。

程序清单9-6:实现筛选的函数

void CExam9_1View::OnViewFilter()

{

// TODO: Add your command handler code here

CFilterDlg dlg;

CString str;

if(dlg.DoModal()==IDOK )//调用筛选对话框,按OK按钮返回

{ if(dlg.m_Filter.IsEmpty())//编辑框为空,显示整个记录集

str="";

else

str="HomeCountry='"+dlg.m_Filter+"'";//定义筛选字符串

m_pSet->m_strFilter=str;

m_pSet->Requery(); //重新查询记录集

UpdateData(false); //更新控件显示

}

}

9.3 MFC DAO连接数据库

DAO(Data Access Objects)即数据对象访问集,是使用Microsoft Jet访问数据库的一种技术。它是Windows API的一部分,可以独立于DBMS进行数据库访问。DAO与ODBC是两种完全不同的访问机制,ODBC的工作依赖于数据库制造商提供的驱动程序,应用程序使用ODBC API访问数据库时,是由ODBC管理器将应用程序的数据库访问请示传递给相应的数据库驱动程序,驱动程序再用SQL语

句完成DBMS的访问任务。DAO则使用Microsoft Jet提供的数据库访问对象集直接访问DBMS,速度比ODBC要快。Microdoft Jet本身的数据库格式为MDB。如果你采用的是MDB格式的数据库,又希望提高数据库访问速度时,可以选择DAO方式。

MFC封装了DAO的绝大多数API函数,MFC为DAO封闭的类与ODBC类非常相似,同样,AppWizard和ClassWizard也提供了类似的支持,所以虽然MFC DAO与MFC ODBC的工作机制不一样,但是开发DAO数据库应用程序的过程与开发ODBC数据库程序却惊人地相似。

1.DaoDatabase类

CDaoDatabase类对应于CDatabase类,支持与数据库的连接,但它不需要在ODBC管理器中注册DSN,直接与一个数据库相连。

2.DaoRecordset类

CDaoRecordset类对应CRecordset类,CDaoRecordset类的数据成员和成员函数与CRecordset类的数据成员和成员函数非常相似,支持同样的记录集操作。

但由于DAO是直接与数据库相连,所以ODBC中的GetDefaultConnect()函数在DAO中是GetDefaultDBName。此外,CDaoRecordset类与数据源之间的数据交换是采用DFX(Dao record Field eXchange)机制,而OBDC采用的是RFX机制。

3.CDaoRecordView类

CDaoRecordView类对应CRecordView类,功能几乎完全相同。

4.CDaoFieldExchange类

CDaoFieldExchange类对应CFieldExchange类,支持数据交换。

5.CDaoTableDef类

CDaoTableDef类支持对数据库中表结构的操作,成员函数Open()打开一张表的结构,Create()函数创建一张新表,CreateField()函数添加字段,Append()函数将新添加的表保存到数据库中。6.CDaoQueryDef类

CDaoQueryDef类用于定义一个查询,并保存到数据库中。

使用MFC AppWizard生成基于DAO的数据库应用程序,与生成基于ODBC的数据库应用程序非常相似,只需在选择数据源的时候选择DAO单选项,然后输入数据库文件的完整路径和文件名。最后生成的程序框架与基于ODBC的应用程序框架非常类似,后面的操作步骤几乎一样。读者可以自已模仿Exam9-1的操作步骤,以DAO方式重写程序。

图9-19 选择DAO数据源

实验

实验1:(独立练习)

重新实现Exam9_1示例程序,要求在AppWizqrd向导的第二步不作指定数据源和选择数据库表的操作,在生成程序框架后,使用ClassWizard创建一个CRecordset的派生类CCustomerset,再按DAO 访问方式设置连接数据库。

实验2:(独立练习)

独立设计一个简单的数据库应用系统,用于管理旅行社的游客信息管理。需要知道信息一般有:身份证号,姓名,性别,住址,电话,参加的旅游项目编号,团队编号等,程序要有浏览、修改、添加、删除游客信息的功能。

自测题

1.MFC提供了两种独立地面向用户的数据库访问系统,一种是,另一种是。

2.ODBC层由三个部件构成:、、。

3.进行ODBC编程,有三个非常重要的元素:,和,它们都是通过句柄来访问的。

4.数据库应用程序的实现步骤分为:、、、、

5.DAO与ODBC是两种完全不同的访问机制,DAO使用,速度比ODBC 要快。

小结

1.MFC提供了基于ODBC和基于DAO的数据库访问方式。

2.基于ODBC的数据库应用程序编程有三个非常重要的元素:环境(Enviroment),连接(Connection)和语句(Statement)。

3.在进行ODBC数据库应用程序开发前,先要在ODBC管理器中注册数据源名,为要操作的数据库选择正确的驱动程序。

4.MFC ODBC支持类包括:CDatabase类、CRedordset类、CRecordView类、CFieldExchange类。5.CDatabase类支持与ODBC数据源的连接。

6.CRecordset类对象表示从数据源中抽取出来的一组记录集,并提供了支持大量记录集记录操作的函

数,如记录移动函数,记录更新函数,记录状态函数等。可以在AppWizard的第二步中设定数据源,框架根据设定自动创建CRecordset的派生类,也可以在程序框架生成后,使用ClassWizard创建一个CRecordset的派生类。

7.CRecordView类支持记录集的控件视图,是CFormView类的派生类。CRecordView类的数据成员m_pSet指向一个记录集,使用ClassWizard将一个控件与记录集的一个选定字段数据成员绑定。与Dialog的DDX数据交换机制相类似,CRecordView类使用RFX数据交换机制在控件与记录集字段数据成员之间自动交换数据。同样使用UpdateDate()函数可以程序控制数据交换的产生。8.CFieldExchange类支持CFieldExchange类支持记录字段数据的自动交换。

9.记录集的类型有快照记录集和动态记录集两种,前者是数据的静态映像,后者是数据的动态映像。10.CRecordView类中支持记录移动的函数有Move()、MoveFirst()、MoveLast()、MoveNext()、MovePrev()、SetAbsolutePosition()。

11.CRecordView类中支持记录更新的函数有AddNew()、Delete()、Edit()、Update()、CancelUpdate()、Requry()。

12.CRecordView类有两个重要的数据成员m_strFilter和m_strSort,m_strFilter是用于表示筛选记录的条件字符串。

13.DAO(Data Access Objects)即数据对象访问集,使用Microsoft Jet提供的数据库访问对象集直接访问DBMS,速度比ODBC要快。Microdoft Jet本身的数据库格式为MDB。

MFC为DAO封闭的类与ODBC类非常相似,与基于ODBC相对应的类有:CDaoDatabase类、CDaoRecordset类、CDaoRecordView类、CDaoFieldExchange类,此外还定义了CDaoTableDef类和CDaoQueryDef类

数据库系统基础教程(第二版)课后习题答案

Database Systems: The Complete Book Solutions for Chapter 2 Solutions for Section 2.1 Exercise 2.1.1 The E/R Diagram. Exercise 2.1.8(a) The E/R Diagram Kobvxybz Solutions for Section 2.2 Exercise 2.2.1 The Addresses entity set is nothing but a single address, so we would prefer to make address an attribute of Customers. Were the bank to record several addresses for a customer, then it might make sense to have an Addresses entity set and make Lives-at a many-many relationship. The Acct-Sets entity set is useless. Each customer has a unique account set containing his or her accounts. However, relating customers directly to their accounts in a many-many relationship conveys the same information and eliminates the account-set concept altogether. Solutions for Section 2.3 Exercise 2.3.1(a) Keys ssNo and number are appropriate for Customers and Accounts, respectively. Also, we think it does not make sense for an account to be related to zero customers, so we should round the edge connecting Owns to Customers. It does not seem inappropriate to have a customer with 0 accounts;

数据库应用基础教程答案

数据库应用基础教程答案 【篇一:access数据库应用基础教程(第三版)习题及答 案】 txt>程(第三版)习题集答案 第1章数据库系统概述 1. 什么是数据库?什么是数据库系统?答:数据库(database) 是存放数据的仓库,严格的讲,数据库是长期存储在计算机内,有组 织的,可共享的大量数据集合。 数据库系统(database systems),是由数据库及其管理软件组成的系统。它是为适应数据处理的需要而发展起来的一种较为理想的 数据处理的核心机构。它是一个实际可运行的存储、维护和应用系 统提供数据的软件系统,是存储介质、处理对象和管理系统的集合体。 2. 什么是数据库管理系统?它有哪些主要功能? 答:数据库管理系统(database management system)是一种操纵 和管理数据 库的大型软件,用于建立、使用和维护数据库,简称dbms。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。 数据库管理系统的主要功能有:数据定义、数据操作、数据库的运 行管理、数据组织、数据库的保护、数据库的维护和通信。 3. 说出几种常用的数据模型。 答:层次模型、网状模型、关系模型。 4. 什么是关系模型? 答:关系模型是用二维表的形式表示实体和实体间联系的数据模型。 5. 简述数据库设计的步骤。 答:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数 据库的建立和测试、数据库运行和维护。 第2章 sql 语言简介 1. 什么是sql语言?sql语言具有哪些特点和功能? 答:sql是一种数据库查询和程序设计语言,用于存取数据以及查询更新和管理关系 数据库系统。 sql的特点和功能有:查询,操作,定义和控制四个方面,sql语言 具有高度的非过程化,语言简洁,语义明显,语法结构简单,直观

数据库基本知识(自己整理,初学者可以看一下,基于某MySql)

数据库

1常见数据库 1.1MySql : 甲骨文 1.2Oracle: 甲骨文 1.3SQL Server: 微软 1.4Sybase: 赛尔斯 1.5DB2: IBM 2MySql基础知识 2.1关系结构数据模型数据库 2.2SQL(Structured Query Language)结构化查询语言2.2.1DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等 操作数据库 CREATE DATABASE [IF NOT EXISTS]mydb1 USE mydb1 DROP DATABASE [IF NOT EXISTS] mydb1

ALTER DATABASE mydb1 CHARACTER SET utf8 操作表 插入表 CREATE TABLE stu( sid CHAR(6), sname VARCHAR(20), age INT, gender VARCHAR(10) ); 更改表 ALTER TABLE t_user ADD (student varcher(20)) ALTER TABLE t_user MODIFY gender CHAR(20) ALTER TABLE t_user CHANGE gender VARCHER(20) ALTER TABLE t_user REMANE genderTO genders ALTER TABLE t_user DROP gender 删除表 DROP TABLE t_user 2.2.2DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据) 插入数据 INSERT INTO t_user VALUES() INSERT INTO 表名 VALUES(值1,值2,…)

南京理工大学《数据库系统基础教程》试题和答案

一、选择题60(选择一个最合适的答案,在答题纸上涂黑) 1.一个事务中的一组更新操作是一个整体,要么全部执行,要么全部不执行。这是事务的:A.原子性B.一致性 C.隔离性 D.持久性 2.在数据库的三级模式结构中,描述一个数据库中全体数据的全局逻辑结构和特性的是:A.外模式 B.模式 C.存储模式D.模式 3.关于联系的多重性,下面哪种说法不正确? A.一个多对多的联系中允许多对一的情形。 B.一个多对多的联系中允许一对一的情形。 C.一个多对一的联系中允许一对一的情形。 D.一个多对一的联系中允许多对多的情形。 4.考虑学校里的"学生"和"课程"之间的联系,该联系的多重性应该是: A. 一对一 B. 多对一 C. 一对多 D. 多对多 5.下面哪种约束要求一组属性在同一实体集任意两个不同实体上的取值不同。 A. 键(key)约束。 B. 单值约束。 C. 参照完整性。 D. 域(domain)约束 6.关系模型要求各元组的每个分量的值必须是原子性的。对原子性,下面哪种解释不正确:A.每个属性都没有部结构。 B.每个属性都不可再分解。 C.各属性值应属于某种基本数据类型。 D.属性值不允许为NULL。 7.对于一个关系的属性(列)集合和元组(行)集合,下面哪种说法不正确: A.改变属性的排列次序不影响该关系。 B.改变元组的排列次序不影响该关系。 C.改变元组的排列次序会改变该关系。 D.关系的模式包括其名称及其属性集合。 8.若R是实体集R1与R2间的一个多对多联系,将其转换为关系R',哪种说法不正确:A.R'属性应包括R1与R2的所有属性。 B.R'属性应包括R1与R2的键属性。 C.R1与R2的键属性共同构成R'的键。 D.R'的属性应包括R自身定义的属性。 9.关于函数依赖的判断,下面哪种说法不正确? A.若任意两元组在属性A上一致,在B上也一致,则有A → B成立。 B.若任意两元组在属性A上一致,在B上不一致,则A → B不成立。 C.若任意两元组在属性A上不可能一致,则不管在B上是否一致,有A → B成立。

Access数据库应用基础教程(第三版)习题及答案

Access数据库应用基础教程(第三版)习题集答案 第1章数据库系统概述 1. 什么是数据库?什么是数据库系统?答:数据库(database)是存放数据的仓库,严格的讲,数据库是长期存储在计算机内,有组织的,可共享的大量数据集合。 数据库系统(database systems),是由数据库及其管理软件组成的系统。它是为适应数据处理的需要而发展起来的一种较为理想的数据处理的核心机构。它是一个实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介质、处理对象和管理系统的集合体。 2. 什么是数据库管理系统?它有哪些主要功能? 答:数据库管理系统(database management system)是一种操纵和管理数据

库的大型软件,用于建立、使用和维护数据库,简称dbms。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。数据库管理系统的主要功能有:数据定义、数据操作、数据库的运行管理、数据组织、数据库的保护、数据库的维护和通信。 3. 说出几种常用的数据模型。 答:层次模型、网状模型、关系模型。4. 什么是关系模型? 答:关系模型是用二维表的形式表示实体和实体间联系的数据模型。 5. 简述数据库设计的步骤。 答:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库的建立和测试、数据库运行和维护。 第2章 SQL 语言简介 1. 什么是SQL语言?SQL语言具有哪些特点和功能? 答:SQL是一种数据库查询和程序设计语言,用于存取数据以及查询更新和管理关系

数据库系统。 SQL的特点和功能有:查询,操作,定义和控制四个方面,SQL语言具有高度的非过程化,语言简洁,语义明显,语法结构简单,直观易懂的特点。SQL语言即可以作为独立语言使用,用户可以在终端键盘上直接键入SQL命令对数据库进行操作,也可以作为嵌入式语言,嵌入到其他高级语言中。 2. SQL语言包含哪几个部分? 答:SQL语言包含4个部分:数据定义语言(DDL-Data Definition Language)、数据查询语言(DQL-Data Query Language)、数据操纵语言(DML-Data Manipulation Language)、数据控制语言(DCL-Data Control Language) 3. 在联接查询中,包含哪几类联接?答:联接可分为3类: (1)内部联接(典型的联接运算,使用类似于 = 或 <> 的比较运算符)。内部联接使用比较运算符根据每个表的通用列中的值匹配两个表中的行。内部联接包括同等

VC++6.0入门第九章连接数据库

第九章 连接数据库 微机在商业上的应用主要在数据处理,要求能够快速方便地访问一个大型数据库中的记录, MFC 提供了两种独立地面向用户的数据库访问系统,一种是ODBC (Open DataBase Connectivity ,开放数据库连接),另一种是DAO (Data Access Objects ,数据访问对象)。本章你将学会使用ODBC 和DAO 连接数据库,并能够简单地操作数据库数据。 9.1 MFC ODBC 连接数据库 ODBC 是微软公司支持开放数据库服务体系的重要组成部分,它定义了一组规范,提供了一组对数据库访问的标准API ,这些API 是建立在标准化版本SQL (Structed Query Language ,结构化查询语言)基础上的。ODBC 位于应用程序和具体的DBMS 之间,目的是能够使应用程序端不依赖于任何DBMS ,与不同数据库的操作由对应的DBMS 的ODBC 驱动程序完成。 9.1.1 ODBC 的构成 ODBC 的结构如图9-1所示。 图9-1 使用ODBC 的层次图 ODBC 层由三个部件构成: 1. ODBC 管理器 ODBC 管理器的主要任务是管理安装ODBC 驱动程序,管理数据源。应用程序要访问数据库,首先必须在ODBC 管理器中创建一个数据源。ODBC 管理器根据数据源提供的数据库存储位置,类型及ODBC 驱动程序信息,建立起ODBC 与一个特定数据库之间的联系,接下来,程序中只需提供数据源名,ODBC 就能连接相关的数据库。ODBC 管理器位于系统控件面板中。 2. 驱动程序管理器 驱动器管理器位于ODBC32.DLL ,是ODBC 中最重要的部件,应用程序通过ODBC API 执行数据库操作。其实ODBC API 不能直接操作数据库,需要通过驱动管理器调用特定的数据库的驱动程序,驱动程序在执行完相应操作后,再将结果通过驱动程序管理器返回。驱动器管理器支持一个应用程序同时 应用程序 数据源DSN ODBC API (SQL) ODBC 管理器 驱动程序 管理器 ODBC 驱动程序 数 据 源 ODBC 层

数据库系统基础教程(第二版)课后习题答案2

Database Systems: The Complete Book Solutions for Chapter 2 Solutions for Section 2.1 Exercise 2.1.1 The E/R Diagram. Exercise 2.1.8(a) The E/R Diagram Kobvxybz Solutions for Section 2.2 Exercise 2.2.1 The Addresses entity set is nothing but a single address, so we would prefer to make address an attribute of Customers. Were the bank to record several addresses for a customer, then it might make sense to have an Addresses entity set and make Lives-at a many-many relationship. The Acct-Sets entity set is useless. Each customer has a unique account set containing his or her accounts. However, relating customers directly to their accounts in a many-many relationship conveys the same information and eliminates the account-set concept altogether. Solutions for Section 2.3 Exercise 2.3.1(a) Keys ssNo and number are appropriate for Customers and Accounts, respectively. Also, we think it does not make sense for an account to be related to zero customers, so we should round the edge connecting Owns to Customers. It does not seem inappropriate to have a customer with 0 accounts;

VBNET数据库编程基础教程

VBNET数据库编程基础教程 众所周知,https://www.doczj.com/doc/1412645299.html,自身并不具备对数据库进行操作的功能,它对数据库的处理是通过.NET FrameWork SDK中面向数据库编程的类库和微软的MDAC来实现的。其中,https://www.doczj.com/doc/1412645299.html,又是.NET FrameWork SDK中重要的组成部分。要了解https://www.doczj.com/doc/1412645299.html,的数据库编程,首先要明白https://www.doczj.com/doc/1412645299.html,的工作原理以及相关的对象、方法、属性。本文将结合具体实例为你简单介绍https://www.doczj.com/doc/1412645299.html,数据库访问对象以及https://www.doczj.com/doc/1412645299.html,数据库编程基本方法。 一、https://www.doczj.com/doc/1412645299.html,数据库访问对象 (一)https://www.doczj.com/doc/1412645299.html,简介 https://www.doczj.com/doc/1412645299.html,是由微软Microsoft ActiveX Data Object(ADO)升级发展而来的。是在.NET中创建分布式数据共享程序的开发接口。https://www.doczj.com/doc/1412645299.html,的数据存取API提供两种数据访问方式,分别用来识别并处理两种类型的数据源,即SQL Server 7.0(及更高的版本)和可以通过OLE DB进行访问的其他数据源。为此ADO.NE T中包含了两个类库,System.Data.SQL库可以直接连接到SQL Server的数据,System.Data.ADO库可以用于其他通过OLE DB进行访问的数据源。如Acces s数据。 (二)https://www.doczj.com/doc/1412645299.html,的名称空间 https://www.doczj.com/doc/1412645299.html,是围绕System.Data基本名称空间设计,其他名称空间都是从Syste m.Data派生而来。它们使得https://www.doczj.com/doc/1412645299.html,不仅访问DataBase中的数据,而且可以访问支持OLE DB的数据源。 当我们讨论https://www.doczj.com/doc/1412645299.html,时,实际讨论的是System.Data和System.Data.OleDb 名称空间。这两个空间的所有类几乎都可以支持所有类型的数据源中的数据。这里我们讨论与后文实例有关的类。即OleDbconnection、OleDbDataAdapter、D ataSet和DataView。 上面列举的类中没有OleDb前缀的,派生自System.Data空间,有此前缀的派生自System.Data.OleDb空间。在使用中,如果要引用OleDb前缀的类,必须导入System.Data.OleDb名称空间。语法如下: Imports System.Data.OleDb 使用没有此前缀的类必须导入System.Data名称空间。语法如下: Imports System.Data

PLSQL学习简易快速入门

PLSQL学习简易快速入门 课程一 PL/SQL 基本查询与排序 本课重点: 1、写SELECT语句进行数据库查询 2、进行数学运算 3、处理空值 4、使用别名ALIASES 5、连接列 6、在SQL PLUS中编辑缓冲,修改SQL SCRIPTS 7、ORDER BY进行排序输出。 8、使用WHERE 字段。 一、写SQL 命令: 不区分大小写。 SQL 语句用数字分行,在SQL PLUS中被称为缓冲区。 最后以;或 / 结束语句。 也可以用RUN来执行语句 二、例1:SQL> SELECT dept_id, last_name, manager_id FROM s_emp; 2:SQL> SELECT last_name, salary * 12, commission_pct FROM s_emp; 对于数值或日期型的字段,可以进行相应的四则运算,优先级与标准的高级语言相同。 SQL> SELECT last_name, salary, 12 * (salary + 100) FROM s_emp; 三、列的别名ALIASES: 计算的时候特别有用; 紧跟着列名,或在列名与别名之间加“AS”; 如果别名中含有SPACE,特殊字符,或大小写,要用双引号引起。 例(因字体原因,读者请记住:引号为英文双引号Double Quotation): SQL> SELECT last_name, salary, 12 * (salary + 100) ”Annual Salary” FROM s_emp;

四、连接符号:|| 连接不同的列或连接字符串 使结果成为一个有意义的短语: SQL> SELECT first_name || ’’ || last_name || ’, ’|| title ”Employees” FROM s_emp SQL> select divid ||' '|| divname from pub_t_division_test where superid='001' 效果如下图: 五、管理NULL值: SQL> SELECT last_name, title, salary * NVL(commission_pct,0)/100 COMM FROM s_emp; 此函数使NULL转化为有意义的一个值,相当于替换NULL。 select divid,divname,NVL(addr,0) from pub_t_division_test where superid='001' 效果如下图: 六、SQL PLUS的基本内容,请参考 七、ORDER BY 操作: 与其他SQL92标准数据库相似,排序如: SELECT expr FROM table[ORDER BY {column,expr} [ASC|DESC]]; 从Oracle7 release 7.0.16开始,ORDER BY 可以用别名。 另:通过位置判断排序: SQL> SELECT last_name, salary*12 FROM s_emp ORDER BY 2; select * from pub_t_division_test where superid='001'order by3 这样就避免了再写一次很长的表达式。 另:多列排序: SQL> SELECT last name, dept_id, salary FROM s_emp ORDER BY dept_id, salary DESC; SQL>select * from pub_t_division_test where superid='001' order by 1,3 desc

数据库系统基础教程课后答案第五章

Exercise 5.1.1 As a set: Average = 2.37 As a bag: Average = 2.48 Exercise 5.1.2 As a set:

Average = 218 As a bag: Average = 215 Exercise 5.1.3a As a set:

As a bag: Exercise 5.1.3b πbore(Ships Classes) Exercise 5.1.4a For bags: On the left-hand side: Given bags R and S where a tuple t appears n and m times respectively, the union of bags R and S will have tuple t appear n + m times. The further union of bag T with the tuple t appearing o times will have tuple t appear n + m + o times in the final result. On the right-hand side: Given bags S and T where a tuple t appears m and o times respectively, the union of bags R and S will have tuple t appear m + o times. The further union of bag R with the tuple t appearing n times will have tuple t appear m + o + n times in the final result. For sets: This is a similar case when dealing with bags except the tuple t can only appear at most once in each set. The tuple t only appears in the result if all the sets have the tuple t. Otherwise, the tuple t will not appear in the result. Since we cannot have duplicates, the result only has at most one copy of the tuple t. Exercise 5.1.4b For bags: On the left-hand side:

VB数据库基础知识

数据库基础知识 几乎所有的商业应用程序都需要处理大量的数据,并将其组织成易于读取的格式。这种要求通常可以通过数据库管理系统(MDBS)实现。MDBs是用高级命令操作表 格式数据的机制。数据库管理系统隐藏了数据在数据库中的存放方式之类的底层细节,使编程人员能够集中精力管理信息,而不是考虑文件的具体操作或数据连接关系的维护。 下面,先介绍几个基本的概念。 数据库:数据库就是一组排列成易于处理或读取的相关信息。数据库中的实际数据存放成表格(table),类似于随机访问文件。表格中的数据由行(row)和列(column)元素组成,行中包含结构相同的信息块,类似于随机访问文件中的记录,记录则是一组数值(或称为字段的集合),如图1所示: 图1:数据库和表格结构的图形表示 记录集:记录集(RecordSet)是表示一个或几个表格中的对象集合的多个对象。在数据库编程中,记录集等于程序中的变量。数据库中的表格不允许直接访问,而只能通过记录集对象进行记录的浏览和操作。记录集是由行和列构成的,它和表格相似,但可以包含多个表格中的数据。如图2所示网格中的内容来自于一个表格,形成一个记录集。图中所示的查询结果是所有作者的资料。 图2:BIBlIO数据库的Authors表,所选的行是Authors的相关记录 注意:可以把记录看成一种浏览数据库的工具,用户可以根据需要指定要选择的数据,记录集的类型有三类:

(1)DynaSets:这是可修改的显示数据; (2)SnapShots:这是静态(只读)的显示数据; (3)Tables:这是表格的直接显示数据。 DynaSets和SnapShots通常用SQL(结构化查询语言)语句生成,SQL将在以后介绍,但现在只要知道SQL语句是从指定数据库中读取数据的标准命令即可。DynaSets在每次用户数据库时更新,而对记录集的改变会反映在基础表格中。SnapShots是同一数据的静态显示,其中包含生成snapshots时请求的记录(基础表格中的改变不会在SnapShots中反映出来),自然也不会更改SnapShots。DynaSets是最灵活、最强大的记录集。虽然Table类型记录集需要大量间接成本。SnapShots是最缺少灵活性的记录集,但所要的间接成本最少。如果不需要更新数据库,只要浏览记录,可以用SnapShots这种类型。 SnapShots类型还有一个变形正向型SnapShots,这种类型SnapShots的限制更多,只能正向移动,但速度更快。正向型SnapShots可以用于要扫描多个记录并顺序处理(进行数值计算,复制所选记录到另一个表格中,等等)数据库记录的情况。这个记录集不提供反向方法,所以间接成本少。 Tables型记录组可以用于调用数据库表格。Tables比其他记录集类型的处理速度都快,可以保持表格与数据库中的数据同步,也可用于更新数据库。但Table 只限于一个表格。此外,通过Tables型记录集访问表格时,可以利用Tables 的索引值进行快速查找。 https://www.doczj.com/doc/1412645299.html,数据集(Datasets)的概念 1.基本概念 数据集是一种离线了的缓存存储数据,它的结构和数据库一样,具有表格、行、列的一种层次结构,另外还包括了为数据集所定义的数据间的约束和关联关系。用户可通过.NEt框架的命名空间(NameSpace)来创建和操作数据集。 用户可以通过一些诸如属性(properties)、集合(collections)这些标准的构成来了解Dataset这个概念。如: (1)数据集(DataSet)包括数据表格的Tables这个集合以及relation的"Relations"集合。 (2)DataTable类包括了数据表格row的"Rows"集合,数据columns的"Column" 集合,以及数据relation的"ChildRelations"和"ParentRelations"集合。(3)DataRow类包括"RowState"属性,这些值是用来显示数据表格首次从数据库 被加载后是否被修改过,这个属性的值可以为:"Deleted"、"Modified"、"New"以及"Unchanged"。 2.定义(Type)和未定义(Untyped)的数据集 数据集有定型的和未定型的之分,定型的数据集是基本的DataSet类的一个子类,并且含有图表(.xsd文件),它用来描述数据集所拥有的表格的结构。这些图表 文件,包括了表的名字和列名、列所代表的数据的类型信息,以及数据间的约束关系。而一个未定型的数据集则没有这些图表的描述。 在程序中用户可以使用任意两种类型的数据集,然而,定型的数据集可以使得用户对数据的操作更加明了,并且可以减少一些不必要的错误,定型的数据集可以生成一些对象模型,这些模型的第一层次的类(first-class)就是数据集所包含

数据库基础教程课后习题答案顾韵华

习题1 1、简述数据库系统的特点。 答:数据库系统的特点有: 1)数据结构化 在数据库系统中,采用统一的数据模型,将整个组织的数据组织为一个整体;数据不再仅面向特定应用,而是面向全组织的;不仅数据内部是结构化的,而且整体是结构化的,能较好地反映现实世界中各实体间的联系。这种整体结构化有利于实现数据共享,保证数据和应用程序之间的独立性。 2)数据共享性高、冗余度低、易于扩充 数据库中的数据能够被多个用户、多个应用程序共享。数据库中相同的数据不会多次重复出现,数据冗余度降低,并可避免由于数据冗余度大而带来的数据冲突问题。同时,当应用需求发生改变或增加时,只需重新选择不同的子集,或增加数据即可满足。 3)数据独立性高 数据独立性是由DBMS 的二级映像功能来保证的。数据独立于应用程序,降低了应用程序的维护成本。 4)数据统一管理与控制 数据库中的数据由数据库管理系统(DBMS )统一管理与控制,应用程序对数据的访问均经由DBMS 。DBMS 提供四个方面的数据控制功能:并发访问控制、数据完整性、数据安全性保护、数据库恢复。 2、什么是数据库系统? 答:在计算机系统上引入数据库技术就构成一个数据库系统(DataBase System ,DBS )。数据库系统是指带有数据库并利用数据库技术进行数据管理的计算机系统。DBS 有两个基本要素:一是DBS 首先是一个计算机系统;二是该系统的目标是存储数据并支持用户查询和更新所需要的数据。 3、简述数据库系统的组成。 答:数据库系统一般由数据库、数据库管理系统(及其开发工具)、数据库管理员(DataBase Administrator ,DBA )和用户组成。 4、试述数据库系统的三级模式结构。这种结构的优点是什么? 答:数据库系统的三级模式结构是指数据库系统是由外模式、模式和内模式三级构成,同时包含了二级映像,即外模式/模式映像、模式/内模式映像,如下图所示。 数据库应用1…… 外模式A 外模式B 模式 应用2应用3应用4应用5…… 模式 外模式/模式映像 模式/内模式映像 数据库系统的这种结构具有以下优点: (1)保证数据独立性。将外模式与模式分开,保证了数据的逻辑独立性;将内模式与模式分开,保证了数据的物理独立性。 (2)有利于数据共享,减少了数据冗余。 (3)有利于数据的安全性。不同的用户在各自的外模式下根据要求操作数据,只能对

数据库基础知识试题(含答案)

数据库基础知识试题 部门____________ 姓名__________ 日期_________ 得分__________ 一、不定项选择题(每题分,共30分) 1.DELETE语句用来删除表中的数据,一次可以删除( )。D A .一行 B.多行 C.一行和多行 D.多行 2.数据库文件中主数据文件扩展名和次数据库文件扩展名分别为( )。C A. .mdf .ldf B. .ldf .mdf C. .mdf .ndf D. .ndf .mdf 3.视图是从一个或多个表中或视图中导出的()。A A 表 B 查询 C 报表 D 数据 4.下列运算符中表示任意字符的是( )。B A. * B. % C. LIKE 5.()是SQL Server中最重要的管理工具。A A.企业管理器 B.查询分析器 C.服务管理器 D.事件探察器 6.()不是用来查询、添加、修改和删除数据库中数据的语句。D A、SELECT B、INSERT C、UPDATE D、DROP 7.在oracle中下列哪个表名是不允许的()。D A、abc$ B、abc C、abc_ D、_abc 8.使用SQL命令将教师表teacher中工资salary字段的值增加500,应该使用的命令 是()。D A、Replace salary with salary+500 B、Update teacher salary with salary+500 C、Update set salary with salary+500 D、Update teacher set salary=salary+500 9.表的两种相关约束是()。C

Oracle11g数据库基础教程-参考答案

Oracle11g数据库基础教程 参考答案

第1章Oracle 11g数据库安装与配置1.简答题 (1) 企业版数据库服务器包含所有的数据库组件,主要针对高端的应用环境,适用于安全性和性能要求较高的联机事务处理(OLTP)、查询密集型的数据仓库和要求较高的Internet应用程序:标准版数据库服务器提供大部分核心的数据库功能和特性,适合于工作组或部门级的应用程序:个人版数据库服务器只提供基本数据库管理功能和特性,适合单用户的开发环境,为用户提供开发测试平台。 (2) 常用数据库类型包括事务处理类、数据仓库类以通用类型。其中事务处理类型主要针对具有大量并发用户连接,并且用户主要执行简单事务处理的应用环境。事务处理数据库的典型应用有银行系统数据库、Internet电子商务数据库、证券交易系统数据库等。对于需要较高的可用性和事务处理性能、存在大量用户并行访问相同数据以及需要较高恢复性能的数据库环境,事务处理类型的配置可以提供最佳性能;数据仓库类型的数据库主要针对有大量的对某个主题进行复杂查询的应用环境。数据仓库的典型应用有客户订单研究、支持呼叫、销售预测、采购模式以及其他战略性业务问题的历史数据研究。对于需要对大量数据进行快速访问,以及复杂查询的数据库环境,数据仓库类型配置是最佳选择;通用类型配置的数据库是事务处理数据库与数据仓库配置的折衷方案。既可以支持大量并发用户的事务处理,又可以快速对大量历史数据进行复杂的数据扫描和处理。 (3) 数据库名可以由字母、数字、下划线(_)、#和美元符号($)组成,且必须以字母开头,长度不超过30个字符。在单机环境中,可以不设置域名,域名长度不能超过128个字符。Oracle服务标识符(SID)是一个Oracle实例的唯一名称标识,长度不能超过12个字符。(4) ● OracleServiceORCL:数据库服务(数据库实例),是Oracle核心服务,是数据库启 动的基础,只有该服务启动,Oracle数据库才能正常启动。(必须启动) ● OracleOraDb11g_home1TNSListener:监听器服务,该服务只有在远程访问数据库时 才需要(无论远程计算机还是本地计算机,凡是通过Oracle Net网络协议连接数据库都属于远程访问)。(必须启动) ● OracleOraDb11g_home1ConfigurationManager:配置Oracle启动时的参数的服务。(非 必须启动) ● OracleOraDb11g_home1ClrAgent:提供对.NET支持的Oracle数据库扩展服务。(非 必须启动) ● OracleJobSchedulerORCL:数据库作业调度服务。(非必须启动) ● OracleDBConsoleorcl:Oracle控制台服务,即企业管理器服务。只有该服务启动了, 才可以使用Web方式的企业管理器管理数据库。(非必须启动) ● OracleVssWriterORCL:是Oracle对VSS提供支持的服务。(非必须启动) ● OracleMTSRecoveryService:是允许数据库充当一个微软事务服务器、COM/COM+ 对象和分布式环境下的事务资源管理器的服务。

SQl数据库快速入门必须掌握的四大基本语句

SQl数据库快速入门必须掌握的四大基本语句 做一个系统的后台,基本上都少不了增删改查,作为一个新手入门,我们必须要掌握SQL 四条最基本的数据操作语句:Insert,Select,Update和Delete!下面对这四个语句进行详细的剖析: 熟练掌握SQL是数据库用户的宝贵财富。在本文中,我们将引导你掌握四条最基本的数据操作语句—SQL的核心功能—来依次介绍比较操作符、选择断言以及三值逻辑。当你完成这些学习后,显然你已经开始算是真正SQL入门了。 在我们开始之前,先使用CREATE TABLE语句来创建一个表。DDL语句对数据库对象如表、列和视进行定义。它们并不对表中的行进行处理,这是因为DDL语句并不处理数据库中实际的数据。这些工作由另一类SQL语句—数据操作语言(DML)语句进行处理。 SQL中有四种基本的DML操作:INSERT,SELECT,UPDATE和DELETE。由于这是大多数SQL用户经常用到的,我们有必要在此对它们进行一一说明。在图1中我们给出了一个名为EMPLOYEES的表。其中的每一行对应一个特定的雇员记录。请熟悉这张表,我们在后面的例子中将要用到它。 INSERT语句 用户可以用INSERT语句将一行记录插入到指定的一个表中。例如,要将雇员John Smith 的记录插入到本例的表中,可以使用如下语句: INSERT INTO EMPLOYEES VALUES ('Smith','John','1980-06-10', 'Los Angles',16,45000); 通过这样的INSERT语句,系统将试着将这些值填入到相应的列中。这些列按照我们创建表时定义的顺序排列。在本例中,第一个值“Smith”将填到第一个列LAST_NAME中;第二个值“John”将填到第二列FIRST_NAME中……以此类推。 我们说过系统会“试着”将值填入,除了执行规则之外它还要进行类型检查。如果类型不符(如将一个字符串填入到类型为数字的列中),系统将拒绝这一次操作并返回一个错误信息。 如果SQL拒绝了你所填入的一列值,语句中其他各列的值也不会填入。这是因为SQL 提供对事务的支持。一次事务将数据库从一种一致性转移到另一种一致性。如果事务的某一部分失败,则整个事务都会失败,系统将会被恢复(或称之为回退)到此事务之前的状态。 回到原来的INSERT的例子,请注意所有的整形十进制数都不需要用单引号引起来,而字符串和日期类型的值都要用单引号来区别。为了增加可读性而在数字间插入逗号将会引起错误。记住,在SQL中逗号是元素的分隔符。 同样要注意输入文字值时要使用单引号。双引号用来封装限界标识符。 对于日期类型,我们必须使用SQL标准日期格式(yyyy-mm-dd),但是在系统中可以进行定义,以接受其他的格式。当然,2000年临近,请你最好还是使用四位来表示年份。 既然你已经理解了INSERT语句是怎样工作的了,让我们转到EMPLOYEES表中的其他部分: INSERT INTO EMPLOYEES VALUES ('Bunyan','Paul','1970-07-04', 'Boston',12,70000); INSERT INTO EMPLOYEES VALUES

SQLServer2008数据库应用教程课后答案

第1章数据库基础 一、单项选择题 1.C 2.A 3.C 4.D 5.D 6.B 7.A 8.B 9.B 10.D 11.C 12.A 13.C 14.B 15.A 16.B 17.A 18.D 19.B 20.B 21.A; D 22.A 23.C 24.D 25.B 26.B 27.B 28.D 29.B 30.B 二、填空题 1.概念;数据 2.属性 3.码 4.一对一联系;一对多(或多对一)联系;多对多联系 5.候选码 6.候选码 7.关系名(属性1,属性2,…,属性n) 8.关系数据结构;关系操作集合;关系完整性约束 9.实体;参照;用户定义的;实体;参照 10.空植 11.需求分析阶段;概念结构设计阶段;逻辑结构设计阶段;物理结构设计阶段;数据库实施阶段;数据库运行和维护阶段 12.准确了解并分析用户对系统的要求,尤其是用户的信息要求、处理要求、安全性与完整性要求,确定所要开发的应用系统的目标,产生用户和设计者都能接受的需求说明书,做为下一步数据库概念结构设计的基础。 13.将需求分析得到的用户需求抽象为信息结构即概念模型。 14.将概念结构进一步转化为某一DBMS支持的数据模型,并对其进行优化。 15.为逻辑数据模型选取一个最适合应用环境的物理结构,包括数据库在物理设备上的存储结构和存取方法。 三、指出以下各缩写的英文意思和中文意思 1.DB:DataBase 2.DBMS:Database Management System 3.RDBMS: 4.DBS:DataBase System 5.DBA:Relational Database Management System 6.NF:Normal Form 7.DDL:Data Definition Language 四、按题目要求回答问题

数据库模型基础知识及数据库基础知识总结

数据库模型基础知识及数据库基础知识总结 数据库的4个基本概念 1.数据(Data):描述事物的符号记录称为数据。 2.数据库(DataBase,DB):长期存储在计算机内、有组织的、可共享的大量数据的集合。 3.数据库管理系统(DataBase Management System,DBMS 4.数据库系统(DataBase System,DBS) 数据模型 数据模型(data model)也是一种模型,是对现实世界数据特征的抽象。用来抽象、表示和处理现实世界中的数据和信息。数据模型是数据库系统的核心和基础。数据模型的分类 第一类:概念模型 按用户的观点来对数据和信息建模,完全不涉及信息在计算机中的表示,主要用于数据库设计现实世界到机器世界的一个中间层次 ?实体(Entity): 客观存在并可相互区分的事物。可以是具体的人事物,也可以使抽象的概念或联系 ?实体集(Entity Set): 同类型实体的集合。每个实体集必须命名。 ?属性(Attribute): 实体所具有的特征和性质。 ?属性值(Attribute Value): 为实体的属性取值。 ?域(Domain): 属性值的取值范围。 ?码(Key): 唯一标识实体集中一个实体的属性或属性集。学号是学生的码?实体型(Entity Type): 表示实体信息结构,由实体名及其属性名集合表示。如:实体名(属性1,属性2,…) ?联系(Relationship): 在现实世界中,事物内部以及事物之间是有联系的,这些联系在信息世界中反映为实体型内部的联系(各属性)和实体型之间的联系(各实体集)。有一对一,一对多,多对多等。 第二类:逻辑模型和物理模型 逻辑模型是数据在计算机中的组织方式

相关主题
文本预览
相关文档 最新文档