版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、图书管理系统设计与实现,李攀,内容,一、概述,所要开发的系统相关概念、系统技术现状、论文(报告)结构描述。系统在国内外发展现状。本系统的特点和优势。,二、需求分析,要求有实地调研记录。结构化建模方法:要求有数据流图、数据字典等。面向对象建模方法:要求有用例图。角色的分析:读者,书籍。角色上功能分析:读者信息管理,书籍信息管理,借书,还书。数据分析。,三、系统设计,数据库设计:要求有概念设计(E-R图)、逻辑设计和物理设计。面向对象设计:要求有主要类图。功能模块设计:关键技术说明、主要功能说明、关键代码。用户界面设计:美观、简洁、风格统一。,图书管理系统的数据库名为“MBOOK”,该数据库由读者
2、信息表(TReader)、图书信息表(TBook)和借阅信息表(TLend)3个表构成,依托这3个基本表创建视图、触发器和存储过程。,数据库设计,概念设计,图3.1E-R图,逻辑设计,读者信息表(TReader)(借书证号,姓名,性别,出生时间,专业,借书量,照片,详细信息)。图书信息表(TBook)(ISBN,书名,作译者,出版社,价格,复本量,库存量,内容提要,封面照片)。借阅信息表(TLend)(图书ID,借书证号,ISBN,借书时间)。,物理设计,物理设计,物理设计,图3.2图书管理系统功能结构图,功能模块设计,用户界面设计“图书管理系统”的界面如图3.3所示。采用多文档界面(MDI)
3、,其中包括“借书”、“还书”、“读者管理”和“图书管理”4个子窗体。,图3.3“图书管理系统”界面,“借书”子窗体的功能主要是根据借书证号查询所借的书籍以及借书,如图3.4所示。,图3.4“借书”子窗体,“还书”子窗体的功能主要是还书以及显示未还的书籍,如图3.5所示。,图3.5“还书”子窗体,图3.6“读者管理”子窗体,“读者管理”子窗体的功能主要是查询、修改、添加和删除读者信息,如图3.6所示。,“图书管理”子窗体的功能主要是查询、修改、添加和删除图书信息,如图3.7所示。,图3.7“图书管理”子窗体,四、系统实现,开发环境:此实例使用的数据库为SQLServer2008开发版。此实例使用
4、的开发软件为:VisualStudio2010.NET,编程语言为:C#。程序编码:源程序文档化,符号名、注释、书写格式。实现步骤:4.1数据库建立4.2项目的创建和父窗体的实现4.3借书窗体的实现4.4读者窗体的实现,1.创建数据库(1)打开数据库管理器。依次执行【开始】【所有程序】【MicrosoftSQLServer2008】【SQLServerManagementStudio】菜单命令,打开数据库管理工具,在弹出的“连接到服务器”对话框中选择“服务器名称”和“身份验证”,如图4.1所示,单击“连接”按钮,连接到所选择的服务器。,图4.1“连接到服务器”对话框,4.1数据库建立,(2)新
5、建数据库。在“对象资源管理器”中用鼠标右键单击“数据库”,选择“新建数据库”选项,在弹出的“新建数据库”对话框中输入数据库名“MBOOK”,单击“确定”按钮,完成数据库的创建,如图4.2所示。,图4.2“新建数据库”对话框,4.1数据库建立,2.创建表创建表的操作步骤如下:(1)创建读者信息表(Treader)。在“对象资源管理器”中展开刚创建的“MBOOK”数据库,用鼠标右键单击“表”,选择“新建表”选项,在“表设计器”中输入列名、数据类型并选择是否允许Null值。设计完所有的字段后用鼠标右键单击“ReaderID”字段,选择“设置主键”选项,则“ReaderID”字段被设置为主键。单击“关
6、闭”按钮,系统弹出对话框提示是否对各项进行的更改,单击“是”按钮后弹出“选择名称”对话框,输入表名“TReader”并单击“确定”按钮完成读者信息表的创建,设计后的表如图4.3所示。,4.1数据库建立,图4.3TReader表的结构,4.1数据库建立,3.创建视图实现功能:把3个基本表联系起来,方便需要3表关联的功能使用。创建方法:打开数据库管理器,在“对象资源管理器”中用鼠标右键单击“视图”,在打开的快捷菜单中选择“新建视图”选项,分别添加“TLend”、“TBook”和“TReader”3个表,添加完后3个表的关系如图4.4所示。输入命令并单击执行SQL命令图标“”,命令如下所示:,图4.
7、4表之间的关系图,4.1数据库建立,CREATEVIEWRBLASSELECTTReader.ReaderID,TLend.BookID,TLend.ISBN,TBook.BookName,TBook.Publisher,TBook.Price,TLend.LTimeFROMTReaderINNERJOINTLendONTReader.ReaderID=TLend.ReaderIDINNERJOINTBookONTBook.ISBN=TLend.ISBN,4.1数据库建立,4.创建完整性约束界面方式创建完整性约束的方法是:打开数据库管理器,在“对象资源管理器”中展开数据库MBOOK中的各个表,
8、用鼠标右键单击表TLead下的“键”,选择“新建外键”选项,在弹出的“外键关系”对话框中选择“表和列规范”,单击出现的图标按钮“”,如图4.5所示,弹出“表和列”对话框,主键表选择“TReader”,字段选择“ReaderID”,外键表的字段选择“ReaderID”,如图4.6所示,单击“确定”按钮,关闭TLead表并保存表的设置,完成完整性约束的创建。,4.1数据库建立,图4.5“外键关系”对话框图4.6“表和列”对话框,4.1数据库建立,5.创建存储过程存储过程名称为Book_Borrow。参数:借书证号(in_ReaderID)、ISBN(in_ISBN)、图书ID(in_BookID)
9、、执行信息(out_str)。实现功能:根据存储过程的前3个参数,实现读者图书“借阅”。第四个参数为输出参数,将存储过程的执行情况以字符串形式赋予此参数。,4.1数据库建立,编写思路:(1)根据“借书证号”查询读者信息表(TReader)是否存在该读者,如果不存在,则将输出参数out_str赋值为“该读者不存在”并返回“0”,存储过程结束,表示不能借书。(2)根据“ISBN”查询图书信息表(TBook),查询是否存在该图书,如果不存在,则将输出参数赋值为“该图书不存在”并返回“0”,存储过程结束,表示不能借书。(3)根据“借书证号”查询读者信息表(TReader),查询该读者的借书量。如果借书
10、量=5,则将输出参数赋值为“读者借书量不能大于5”并返回“0”,存储过程结束,表示不能借书。,4.1数据库建立,(4)根据“ISBN”查询图书信息表(TBook)中该图书的库存量。如果库存量=0,则将输出参数赋值为“图书库存量为0”并返回“0”,存储过程结束,表示不能借书。(5)查询借阅表(TLend),查看该读者是否已经借阅该图书,如果已经借过,则将输出参数赋值为“读者已经借过该书”并返回“0”,存储过程结束,表示不能借书。(6)查询借阅表(TLend),查看该图书ID是否已经存在,如果存在则将输出参数赋值为“该图书ID已存在”并返回“0”,存储过程结束,表示不能添加借书记录。,4.1数据库
11、建立,(7)使借阅表(TLend)增加一条该读者借书记录;读者信息表(TReader)该读者的借书量加“1”;图书信息表(TBook)该图书(对应ISBN)记录的库存量减“1”。存储过程结束,将输出参数赋值为“借书成功”并返回“1”,表示借书成功。(8)如果存储过程在执行过程中遇到错误则回滚之前进行的操作,并将输出参数赋值为“执行过程中遇到错误”并返回“0”,表示存储过程在执行过程中遇到错误,回滚到执行存储过程前的状态。,4.1数据库建立,创建方法:打开数据库管理器,在“对象资源管理器”中用鼠标右键单击数据库MBOOK的“可编程性”中的“存储过程”项,选择“新建存储过程”,删除自带代码,输入T
12、-SQL存储过程代码,单击执行按钮,图标为“”,代码如下所示。,4.1数据库建立,6.创建触发器实现功能:当用户“归还”图书时,即删除借阅表(TLend)中的一条借书记录时,读者信息表(TReader)该读者的借书量减“1”;图书信息表(TBook)该图书记录的库存量加“1”。此功能可以通过创建借阅表(TLend)的DELETE触发器实现,可以创建T-SQL触发器,触发器名称为TLend_delete。创建方法:打开数据库管理器,在“对象资源管理器”中用鼠标右键单击数据库MBOOK的TLead表中的“触发器”,执行“新建触发器”命令,删除自带代码,输入T-SQL触发器代码。,4.1数据库建立,
13、代码如下所示:USEMBOOKGOCREATETRIGGERTLend_deleteONTLendAFTERDELETEASBEGINUPDATETReaderSETNum=Num-1WHEREReaderID=(SELECTReaderIDFROMdeleted)UPDATETBookSETSNum=SNum+1WHEREISBN=(SELECTISBNFROMdeleted)END,4.1数据库建立,项目的创建步骤如下。1.创建项目运行VS2010,依次执行【文件】【新建】【项目】命令,在弹出的“新建项目”对话框中选中“Windows窗体应用程序”模板,选择项目存放位置并输入项目名称为“B
14、OOKSYS”,单击“确定”按钮完成项目的创建。2.添加窗体打开“解决方案资源管理器”窗口,用鼠标右键单击项目名“BOOKSYS”,依次执行快捷菜单中的“添加”“新建项”命令,在弹出的“添加新项”对话框中选中“Windows窗体”模板,使用默认名称“Form2”,单击“添加”按钮完成窗体的添加。按照同样的方法再添加3个窗体,使用默认命名。,4.2项目的创建和父窗体的实现,父窗体的设计步骤如下。1.设置属性打开Form1的属性窗口,IsMdiContainer属性值设置为“True”,Text属性值设置为“图书管理系统”,Icon属性选择准备好的图标。BackgroundImage属性选择准备好
15、的图片。2.添加控件及控件属性设置从工具箱中拖放1个MenuStrip、1个StatusStrip和1个ToolStrip控件到窗体中。(1)menuStrip1属性设置。选中menuStrip1,在“请在此处键入”处输入“借书((4)为了便于各个方法使用数据库连接字符串,将数据库连接字符串设置为成员变量,代码如下所示(数据库连接字符串可以使用数据库配置向导直接获取,可以参考下面读者管理窗体设计的步骤2):stringstrcon=DataSource=69F638102711447SQL2008;InitialCatalog=MBOOK;UserID=sa;Password=123456;(
16、5)添加“查询”功能代码。切换到窗体设计界面,双击“查询”按钮,系统切换到“Form2.cs”代码编辑器并添加了Button1的Click事件处理方法“Button1_Click”。添加代码,代码如下所示。,4.3借书窗体的实现,(6)添加“借书”功能代码。切换到窗体设计界面,双击“借书”按钮,系统切换到“Form2.cs”代码编辑器并添加了Button2的Click事件处理方法“Button2_Click”。添加代码,代码如下所示。(7)运行程序。按【Ctrl+F5】组合键运行此程序,单击“借书”菜单项,弹出借书子窗体,因为此时数据库中还未有图书信息和读者信息,所以还不能借书,读者可以直接在
17、数据库中添加一些数据进行测试。运行的窗体如图4所示。,4.3借书窗体的实现,设计读者管理窗体的步骤如下。(1)调整窗体及添加控件。打开Form4窗体的设计视图,将此窗体调整到适当大小。从工具箱中拖放2个GroupBox、4个Button、8个Label、4个TextBox、1个ComboBox、2个RadioButton、3个PictureBox、1个BindingNavigator(图标为“”)和1个DataGridView控件到此窗体上。参考如图6所示布局窗体控件。,4.4读者窗体的实现,(2)窗体及控件的属性设置。此窗体的“Text”属性设置为“读者管理”,Icon属性设置为已准备好的图
18、标。此窗体的控件的设置主要是针对DataGridView控件。简单控件的属性设置如表6.5所示。,4.4读者窗体的实现,comboBox1的设置。打开comboBox1的属性窗口,单击“Items”属性后的图标“”打开“字符串集合编辑器”,分别添加“计算机”和“通信工程”,如图17所示。“Text”属性设置为“计算机”。,图17添加专业名称,4.4读者窗体的实现,dataGridView1的设置。打开dataGridView控件属性窗口,单击“DataSource”属性,如图18所示,单击“添加项目数据源”,弹出“数据源配置向导”对话框,选择“数据库”并单击“下一步”按钮到“选择您的数据连接”
19、对话框,单击“新建连接”按钮,在弹出的“添加连接”对话框中设置数据库连接,如图19所示。,图19设置数据库连接,图18添加项目数据源,4.4读者窗体的实现,测试连接成功后单击“确定”按钮,单击“下一步”按钮,再单击“下一步”按钮,提示是否将数据库连接字符串保存到配置文件中,选择“是”复选框,单击“下一步”按钮,弹出“选择数据库对象”对话框,选择TReader表中一些字段,如图20所示,单击“完成”按钮完成数据源的添加。,4.4读者窗体的实现,用鼠标右键单击dataGridView控件,选择“编辑列”选项,在弹出的“编辑列”对话框中将各个字段的“HeaderText”设置为对应汉字,如图21所示
20、。,图20选择数据库对象图21编辑列,4.4读者窗体的实现,(3)添加命名空间。因为本窗体涉及操作SQLServer2008数据库和流的处理,所以打开Form4.cs代码编辑器,添加命名空间:usingSystem.Data.SqlClient;usingSystem.IO;(4)为了便于各个方法使用数据库连接字符串,将数据库连接字符串设置为成员变量,同时将所选择的图片的路径设置为成员变量,代码如下所示:stringstrcon=BOOKSYS.Properties.Settings.Default.MBOOKConnectionString;/获取连接字符串stringFileNamePat
21、h=;/保存图片路径(5)添加“读者添加”功能代码。切换到窗体设计界面,双击“读者添加”按钮,系统切换到“Form4.cs”代码编辑器中并添加了Button1的Click事件处理方法“Button1_Click”。添加代码,代码如下所示。,4.4读者窗体的实现,(6)添加“选择照片”功能代码。在读者追加功能和读者修改功能中有添加和修改照片功能,涉及选择照片。切换到窗体设计界面,双击“选择照片”按钮,系统切换到“Form1.cs”代码设计器中并添加了pictureBox1的Click事件处理方法“pictureBox1_Click”。添加代码,代码如下所示:privatevoidpictureB
22、ox1_Click(objectsender,EventArgse)/选择照片OpenFileDialogopenFileDialog=newOpenFileDialog();/实例化打开文件对话框openFileDialog.InitialDirectory=Environment.GetFolderPath(Environment.SpecialFolder.Personal);openFileDialog.Filter=jpg图片|*.jpg|gif图片|*.gif|所有文件(*.*)|*.*;/设置打开文件类型if(openFileDialog.ShowDialog(this)=Dia
23、logResult.OK)FileNamePath=openFileDialog.FileName;/获取文件路径pictureBox1.Image=Image.FromFile(FileNamePath);/将图片显示在pictureBox中,4.4读者窗体的实现,(7)添加“读者删除”功能代码。切换到窗体设计界面,双击“读者删除”按钮,系统切换到“Form1.cs”代码编辑器并添加了Button2的Click事件处理方法“Button2_Click”。添加代码,代码如下所示。(8)添加“读者修改”功能代码。切换到窗体设计界面,双击“读者修改”按钮,系统切换到“Form1.cs”代码设计器并
24、添加了Button3的Click事件处理方法“Button3_Click”。添加代码,代码如下所示。(9)添加“读者查询”功能代码。切换到窗体设计界面,双击“读者查询”按钮,系统切换到“Form1.cs”代码编辑器并添加了Button4的Click事件处理方法“Button4_Click”。添加代码,代码如下所示。,4.4读者窗体的实现,(10)添加dataGridView1的事件及代码。当单击dataGridView1中任意单元格时,将此单元格的读者所有信息显示在窗体中。打开dataGridView1的属性窗口,单击事件图标“”,双击“CellClick”,切换到代码编辑器中添加代码,代码如
25、下:privatevoiddataGridView1_CellClick(objectsender,DataGridViewCellEventArgse)if(e.RowIndex=0)textBox1.Text=dataGridView1.Rowse.RowIndex.Cells0.Value.ToString();button4_Click(null,null);/调用方法button4_Click,查询读者详细信息,4.4读者窗体的实现,(11)设置bindingNavigator1。打开bindingNavigator1的属性窗口,选择BindingSource的属性值为“tReade
26、rBindingSource”。(12)运行程序。按【Ctrl+F5】组合键运行程序。单击“读者管理”菜单项,输入读者信息并单击“读者添加”按钮完成读者添加,运行后的界面如图6所示。,4.4读者窗体的实现,五、系统测试,功能测试测试用例编写,要求测试用例能对系统主要功能进行测试,要求有相应的测试分析报告。单元测试,六、系统部署,打包应用程序,总结:对所开发的系统进行总结、指出优缺点和进一步改进方向。,参考读者窗体和借书窗体的设计完成还书窗体和图书管理窗体的设计,设计后的界面如下图所示。,L1.数据库1.关系数据库模型关系数据库是以关系模型来组织的。关系模型中数据的逻辑结构是一张二维表,它由行和
27、列组成。一组这样的二维表便组成了关系数据库。例如,图6.20是在学生信息管理系统中使用的一个表Score,用来描述学生课程成绩的属性。,图6.20Score表,关系数据库可以由多个表组成,表与表之间可以以不同的方式相互关联。例如,图6.21是在学生信息管理系统中使用的另一个表Course,用来描述课程信息属性。,图6.21Course表,例如,图6.22是在学生信息管理系统中使用的另一个表Student,用来描述学生基本信息。其中,studentno是Student表中的主键,它和Score表形成一对一的关系。,图6.22Student表,2.结构化查询语句作为用来在DBMS中访问和操作的语言
28、,SQL(结构化查询语言)语言的语句通常分为4类:一是DDL(DataDefinitionLanguage,数据定义语言)语句,用来创建、修改或删除数据库中各种对象,包括表、视图、索引等;二是DML(DataManipulationLanguage,数据操作语言)语句,用来对已经存在的数据库进行记录的插入、删除、修改等操作;三是QL(QueryLanguage,查询语言)语句,用来按照指定的组合、条件表达式或排序检索已存在的数据库中数据,但不改变数据库中的数据;四是DCL(DataControlLanguage,数据控制语言)语句,用来授予或收回访问数据库的某种特权、控制数据操纵事务的发生时间
29、及效果、对数据库进行监视等。,下面简单介绍SQL常用的几个查询语句,如表6.6所示。,(1)SELECT语句。一个典型的SQL查询可以从指定的数据库表中“选择”信息,这时就需要使用SELECT语句执行。它的最简单形式是SELECT*FROMtableName其中,星号(*)用来指定从数据库的tableName表中选择所有的字段(列)。例如,若要查询Course表中所有记录,则可用下列语句:SELECT*FROMCourse若要从表中选择指定字段的记录,则将星号(*)用字段列表代替,多个字段之间用逗号分隔,例如:SELECTcourseno,credit,coursenameFROMCourse
30、执行的结果如图6.23所示,可以看出查询的结果记录集合(简称为“结果集”)中的字段顺序是由SELECT语句中的字段顺序决定的。,图6.23Course表执行SELECT的结果,(2)WHERE子句。在数据表查询SELECT语句中,经常还需要使用WHERE子句来设定查询的条件。它的一般形式如下:SELECTcolumnl,column2,FROMtableNameWHEREcondition例如,若将Score表中成绩(score)在80分以上的记录查询出来,则可使用下列语句:SELECTstudentno,scoreFROMScoreWHEREscore=80WHERE子句中的条件可以包含(大
31、于)、=(大于等于)、=(等于)、(不等于)和LIKE等运算符。其中,LIKE用于匹配条件的查询,它可以使用星号(*)和问号(?)等通配符,星号(*)表示可以出现0个或多个字符,问号(?)表示该位置处只能出现1个字符。例如:SELECT*FROMScoreWHEREstudentnoLIKE21*,查询Score表中所有学号以21打头的记录。注意,LIKE后面的字符串是以单引号标识的。再如:SELECT*FROMScoreWHEREstudentnoLIKE210105?查询Score表中所有学号以210105打头,且学号为8位的记录。WHERE子句中的条件还可用AND(与)、OR(或)以及N
32、OT(非)运算符构造复合条件查询,例如:若查询Score表中成绩(score)在70分到80分之间的记录,则可使用下列语句:SELECT*FROMScoreWHEREscore=70,(3)ORDERBY子句。在数据表查询SELECT语句中,若将查询到的记录进行排序,则可使用ORDERBY子句。如下面的形式:SELECTcolumnl,column2,FROMtableNameWHEREconditionORDERBYcoll,col2,ASC或SELECTcolumnl,column2,FROMtableNameWHEREconditionORDERBYcol1,col2,DESC其中,AS
33、C表示升序(从低到高),DESC表示降序(从高到低),coll,col2,分别用来指定按什么字段排序。当指定多个字段时,先按coll排序,出现相同coll的记录时,相同的记录按col2排序,依次类推。例如:SELECT*FROMScoreORDERBYstudentno,courseno查询的结果集是按学生号和课程号进行升序排列。,(4)INNERJOIN语句。在进行多个数据表查询时,总希望将多个表的某几个字段作为结果集的内容。例如,在学生信息管理系统中,常需要将学生成绩按学号、姓名、课程名称、成绩的记录查询出来,这时就需要将Score.Student和Course3个表的数据合并成单个数据集
34、,这种合并称为表的“联接”,它是通过在SELECT查询中使用INNERJOIN(内联)操作实现的。INNERJOIN的最简单形式是SELECTcolumnl,column2FROMtable1INNERJOINtable2ONtablel.columnName=table2.columnName,INNERJOIN将tablel和table2表进行内联,其联接的条件由ON子句设定。通过ON子句指定这两个表中的哪些列进行比较,从而确定最终需要合并的记录。例如:SELECTScore.studentno,Score.courseno,Course.coursename,Score.scoreFRO
35、MScoreINNERJOINCourseONScore.courseno=Course.coursenoORDERBYstudentno,courseno,再如:SELECTScore.studentno,Student.studentname,Score.courseno,Course.coursename,Score.scoreFROM(ScoreINNERJOINStudentONScore.studentno=Student.studentno)INNERJOINCourseONScore.courseno=Course.coursenoORDERBYScore.studentno,
36、Score.courseno将Score表中的studentno、courseno、score和Course表中的coursename列以及Student表中的studentname列合并。圆括号是用于SELECT查询的INNERJOIN嵌套操作。,(5)INSERT语句。INSERT语句用来向表中插入一个新的记录。该语句的常用形式是INSERTINTOtableName(coll,col2,col3,colN)VALUES(vall,va12,val3,vaIN)其中,tableName用来指定插入新记录的数据表,tableName后跟一对圆括号,包含一个以逗号分隔的列(字段)名的列表,VA
37、LUES后面的圆括号内是一个以逗号分隔的值列表,它与tableName后面的列名列表是一一对应的。需要说明的是,若某个记录的某个字段值是字符串,则需要用单引号括起来。例如:INSERTINTOStudent(studentno,studentname)VALUES(21010503,张小峰)将在Student中插入一个新行,其中studentno(学号)为“21010503”,studentname(学生姓名)为“张小峰”,对于该记录的其他字段值,由于没有指定相应的值,其结果由系统决定。,(6)UPDATE语句。UPDATE语句用于更新表中的数据。该语句的常用形式是UPDATEtableNam
38、eSETcolumnl=valuel,column2=value2,columnN=valueNWHEREcondition该语句可以更新tableName表中一行记录或多行记录的数据,这取决于WHERE后面的条件。关键字SET后面是以逗号分隔的“列名/值”列表。例如:UPDATEStudentSETstudentname=王鹏WHEREstudentno=21010503,(7)DELETE语句。DELETE语句用来从表中删除记录,其常用形式如下:DELETEFROMtableNameWHEREcondition该语句可以删除tableNam表中一行记录或多行记录,这取决于WHERE后面的条
39、件。例如:DELETEFORMStudentWHEREstudentnoLIKE210105*将Student表中所有以210105开头的学号的记录删除。,3.数据访问命令空间在.NET托管环境中,用于数据和XML处理的命名空间主要包括:(1)System.Data。该命名空间是由ADO.NET(ActiveXDataObject,ActiveX数据对象)类组成的,它是托管应用程序中主要数据访问方法。ADO.NET组件能够有效地管理来自多个数据源的数据,并为分布式应用程序中的数据进行请求、更新和协调提供相应的工具。(2)System.Data.Common。该命名空间包含由.NET框架中数据提
40、供程序共享的类,用于在托管空间中访问数据源,旨在给开发人员提供一种方法以编写将作用于所有.NETFramework数据提供程序的ADO.NET代码。,(3)System.Data.Odbc。该命名空间用于在托管空间中访问ODBC(OpenDatabaseConnectivity,开放数据库连接)数据源。ODBC提供应用程序接口(API),使得任何一个数据库都可以通过ODBC驱动器与指定的DBMS相联。用户的程序就可以通过调用ODBC驱动管理器中相应的驱动程序达到管理数据库的目的。,(4)System.Data.OleDb。该命名空间用于OLEDB(OLEDataBase,OLE数据库)数据源的
41、连接、执行命令以及读取等。OLEDB试图提供一种统一的数据访问接口,并除了处理标准关系型数据库中的数据之外,还能处理包括邮件数据、Web上的文本或图形、目录服务(DirectoryServices)以及主机系统中的IMS和VSAM数据。OLEDB提供一个数据库编程COM(组件对象模型)接口,使得数据的使用者(应用程序)可以使用同样的方法访问各种数据,而不用考虑数据的具体存储地点、格式或类型。这个COM接口与ODBC相比,其健壮性和灵活性要高得多。,(5)System.Data.SqlClient。该命名空间用于SQLServer7.0数据源的连接、执行命令以及读取等。它与System.Data
42、.OleDb命名空间类似,但它为访问SQLServer7.0及更高版本进行了优化。(6)System.Data.SqITypes。该命名空间用于为SQLServer内部提供内部安全、快捷的数据类。(7)System.Data.OracleClient。该命名空间用于Oracle数据源的连接、执行命令以及读取等。(8)System.Xml。该命名空间用于支持XML数据的处理。,【例EX1】根据上面的介绍创建数据库,命名为“STUINF”,用于记录学生信息,包括记录学生信息表,表名为“Student”,记录学生课程成绩表,表名为“Score”以及记录课程的表,表名为“Course”,使用SQL语句
43、插入、更新和查询记录(在第一部分使用界面方式创建数据库和表,在这里使用SQL语句创建数据库和表)。,设计步骤:1.打开数据库管理器依次执行【开始】【所有程序】【MicrosoftSQLServer2008】【SQLServerManagementStudio】菜单命令,打开数据库管理工具,在弹出的“连接到服务器”对话框中选择“服务器名称”和“身份验证”,如图6.6所示,单击“连接”按钮连接到所选择的服务器。2.创建数据库单击“新建查询”工具按钮,在打开的查询设计器窗口中输入创建数据库“STUINF”的T-SQL语句,单击执行按钮“”创建数据库。代码如下所示:CREATEDATABASESTUI
44、NF,3.创建表在查询设计器窗口中输入创建表“Student”、“Course”和“Score”的T-SQL语句,单击执行按钮“”创建表,代码如下所示。4.插入数据信息以及查询数据信息在查询设计器窗口中输入插入及查询T-SQL语句,单击执行按钮“”执行此语句,结果如图6.24所示,代码如下所示:USESTUINFGOINSERTINTOStudent(studentno,studentname,xb,birthday,native,address)VALUES(081101,王林,男,1989-3-10,江苏南京,南京师范大学)INSERTINTOStudent(studentno,stude
45、ntname,xb,birthday,native,address)VALUES(081102,李小锋,男,1987-10-3,江苏南京,南京师范大学)SELECT*FROMStudent,返回,图6.24插入信息后查询的结果,返回,L1.ADO.NET技术1.ADO.NET概述ADO.NET数据模型从ADO发展而来,但它不只是对ADO的改进,而是采用了一种全新的技术。主要表现在以下几个方面:(1)ADO.NET不是采用ActiveX技术,而是与.NET框架紧密结合的产物。(2)ADO.NET包含对XML标准的完全支持,这对于跨平台交换数据具有重要的意义。,(3)ADO.NET既能在与数据源连
46、接的环境下工作,又能在断开与数据源连接的条件下工作。特别是后者,非常适合于网络应用的需要。因为在网络环境下,保持与数据源连接,不符合网站的要求,不仅效率低,付出的代价高,而且常常会引发由于多个用户同时访问时带来的冲突。因此ADO.NET系统集中主要精力用于解决在断开与数据源连接的条件下数据处理的问题。,ADO.NET提供了面向对象的数据库视图,并且在ADO.NET对象中封装了许多数据库属性和关系。最重要的是,ADO.NET通过多种方式封装和隐藏了很多数据库访问的细节。可以完全不知道对象在与ADO.NET对象交互,也不用担心数据移动到另外一个数据库或者从另一个数据库获得数据的细节问题。如图6.2
47、5所示显示了ADO.NET架构总览。,图6.25通过ADO.NET访问数据库的接口模型,在ADO.NET中数据集与数据提供器是两个非常重要而又相互关联的核心组件:数据集(DataSet)与数据提供器(Provider)。它们之间的关系如图6.26所示。图的右边代表数据集(DataSet),左边代表数据提供器(Provider)。下面将对两者分别做详细讲解。,图6.26数据集与数据提供器的关系,2.ADO.NET对象模型(1)Connection对象。建立与特定数据源的连接。在进行数据库操作之前,首先要建立对数据库的连接。所有Connection对象的基类均为DbConnection类。Conn
48、ection类中最重要的属性是ConnectionString,该属性用来指定建立数据库连接所需要的连接字符串,其中包括如下几项:服务器名称、数据源信息以及其他登录信息。ConnectionString的主要参数有如下几种。,DataSource:设置需连接的数据库服务器名。InitialCatalog:设置连接的数据库名称。IntegratedSecurity:服务器的安全性设置,是否使用信任连接。其值有True、False和SSPI3种,True和SSPI都表示使用信任连接。WorkstationId:数据库客户端标识。默认为客户端计算机名。PacketSize:获取与SQLServer通
49、信的网络数据包的大小,单位为字节,有效值为51232767,默认值为8192。UserID:登录SQLServer的账号。Password(Pwd):登录SQLServer的密码。ConnectionTimeout:设置SqlConnection对象连接SQL数据库服务器的超时时间,单位为秒,若在所设置的时间内无法连接数据库,则返回失败。默认为15秒。,以SQLServer数据库的连接对象为例,类名为SqlConnection,其创建的语句是SqlConnectionconn=newSqlConnection();设置ConnectionString属性的语句是conn.ConnectionS
50、tring=DataSource=MySQLServer;/服务器名userid=sa;password=123456;/安全信息Initialcatalog=Northwind;IntegratedSecurity=False;/数据库名以及其他参数,如上例,存储连接字符串的详细信息(如用户名和密码)可能会影响应用程序的安全性。若要控制对数据库的访问,一种较为安全的方法是使用Windows集成安全性,此时连接字符串可以修改为conn.ConnectionString=DataSource=MySQLServer;/服务器名Initialcatalog=Northwind;/数据库名Integ
51、ratedSecurity=SSPI;/采用Windows集成安全性,表6.7列出了Connection对象常用的方法。,(2)Command对象。Command是对数据源操作命令的封装。对于数据库来说,这些命令既可以是内联的SQL语句,也可以是数据库的存储过程。由Command生成的对象建立在连接的基础上,对连接的数据源指定相应的操作。所有Command对象的基类均为DbCommand类。每个.NETFramework数据提供程序包括一个Command对象:OLEDB.NETFramework数据提供程序包括一个OleDbCommand对象;SQLServer.NETFramework数据提
52、供程序包括一个SqlCommand对象;ODBC.NETFramework数据提供程序包括一个OdbcCommand对象;Oracle.NETFramework数据提供程序包括一个OracleCommand对象。,以下代码示例演示如何创建SqlCommand对象。stringsql=SELECTCategoryID,CategoryNameFROMCategories;SqlCommandcommand1=newSqlCommand(sql,sqlConnection1);参数sql为需执行的SQL命令,上述语句将生成一个命令对象command1,对由sqlConnection1连接的数据源指
53、定检索(SELECT)操作。这两个参数在创建Command对象时也可以省略不写,而在创建了Command对象后,再通过设置Command对象的CommandText和CommandType等属性来指定。,Command对象的主要属性和方法分别列于表6.8和表6.9中。,Command对象的CommandType属性用于设置命令的类别:可以是存储过程、表名或SQL语句。当将该属性值设为CommandType.TableDirect时,要求CommandText的值必须是表名而不能是SQL语句。例如:OleDbCommandcmd=newOleDbCommand();cmd.CommandText
54、=students;cmd.CommandType=CommandType.TableDirect;cmd.Connection=conn;执行这段代码以后,将返回students表中的所有记录。它等价于以下代码:OleDbCommandcmd=newOleDbCommand();cmd.CommandText=Select*fromstudents;cmd.CommandType=CommandType.Text;cmd.Connection=conn;,(3)DataReader对象。使用DataReader可以实现对特定数据源中的数据进行高速、只读、只向前的数据访问。与数据集(DataS
55、et)不同,DataReader是一个依赖于连接的对象。就是说,它只能在与数据源保持连接的状态下工作。所有DataReader对象的基类均为DbDataReader类。同Command类似,每个.NETFramework数据提供程序包括一个DataReader对象:OLEDB.NETFramework数据提供程序包括一个OleDbDataReader对象;SQLServer.NETFramework数据提供程序包括一个SqlDataReader对象;ODBC.NETFramework数据提供程序包括一个OdbcDataReader对象;Oracle.NETFramework数据提供程序包括一个
56、OracleDataReader对象。,使用DataReader检索数据首先必须创建Command对象的实例,然后通过调用Command的ExecuteReader方法创建一个DataReader,以便从数据源检索行。以下示例说明如何使用SqlDataReader,其中command代表有效的SqlCommand对象。SqlDataReaderreader=command.ExecuteReader();,在创建了DataReader对象后,就可以使用Read方法从查询结果中获取行。通过传递列的名称或序号引用,可以访问返回行的每一列。为了实现最佳性能,DataReader也提供了一系列方法,使
57、得能够访问其本机数据类型(GetDateTime、GetDouble、GetString、GetInt32等)的列值。以下代码示例循环访问一个DataReader对象,并从每个行中返回两个列。if(reader.HasRows)/判断是否有结果返回while(reader.Read()/依次读取行Console.WriteLine(t0t1,reader.GetInt32(0),reader.GetString(1);elseConsole.WriteLine(Norowsreturned.);reader.Close();每次使用完DataReader对象后都应调用Close方法显式关闭。,
58、DataReader对象的常见的属性和方法分别列于表6.10和表6.11中。,(4)DataSet对象。数据集(DataSet)相当于内存中暂存的数据库,不仅可以包括多张数据表,还可以包括数据表之间的关系和约束。允许将不同类型的数据表复制到同一个数据集中(其中某些数据表的数据类型可能需要做一些调整),甚至还允许将数据表与XML文档组合到一起协同操作。数据集从数据源中获取数据以后就断开了与数据源之间的连接。允许在数据集中定义数据约束和表关系,增添、删除和编辑记录,还可以对数据集中的数据进行查询、统计等。当完成了各项数据操作以后,还可以将数据集中的最新数据更新到数据源。,创建数据集对象的语句格式如
59、下:DataSetds=newDataSet();或者:DataSetds=newDataSet(数据集名);语句中ds代表数据集对象。可以通过调用DataSet的两个重载构造函数来创建DataSet的实例,并且可以选择指定一个名称参数。如果没有为DataSet指定名称,则该名称会设置为“NewDataSet”。,DataSet对象的常用属性列于表6.12中。,在数据集中包括以下几种子类:数据表集合(DataTableCollection)和数据表(DataTable)。DataSet的所有数据表包含于数据表集合DataTableCollection中,通过DataSet的Tables属性访问DataTableCollection。DataTableCollection有以下两个属性。Count:DataSet对象所包含的DataTable个数。Tablesindex,name:获取DataTableCollection中下标为index或名称为name的数据表。如DS.Tables0表示数据集对象DS中的第一个数据表,DS.Tables1表示第二个数据表,依此类推。DS.Tablesstudents表示数据集对象DS中名称为“students”的数据表。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 47838.1-2026水轮发电机组运行状态评估技术导则第1部分:总则
- 痛风饮食禁忌与嘌呤摄入指南
- 年产8万立方米陶粒混凝土生产线可行性研究报告
- 2026届眉山市高三下学期第五次调研考试生物试题含解析
- AI赋能证券服务的创新模式
- 2026规划档案馆面试题及答案
- 人脸识别身份验证
- 管道维修公司销售助理述职报告
- 交易策略优化算法
- 人工智能在银行信息安全保障中的应用
- GA/T 1482-2026机动车驾驶人安全教育内容和方法
- 2026年北京市中考英语试卷真题(含答案及解析)
- 2026 年注塑车间主管上半年述职报告
- 2026上海复旦大学附属中山医院青浦新城院区临床护理岗位招聘笔试题库及答案详解
- 安徽九华山旅游发展股份有限公司招聘笔试真题2025
- 2026年安徽省淮北市辅警考试试题解析及答案
- 【新教材】人教版(2024)八年级下册物理期末检测试卷 3套(含答案)
- 2026上海博物馆公开招聘12名工作人员备考题库及参考答案详解
- 2026年山东定期医师考核题库及答案
- 肿瘤靶向治疗药物皮肤不良反应防治专家共识
- 骨关节炎阶梯治疗专家共识(2026版)
评论
0/150
提交评论