Windows应用编程主讲:陈克力第10章数据库开发技术Windows应用编程主讲:陈克力10.1一个简单的C#数据库应用程序10.2数据库系统与ADO.NET概述10.3SQL语言简介10.4ADO.NET对象10.5数据库操作举例本章内容Windows应用编程主讲:陈克力10.1一个简单的C#数据库应用程序10.1.1创建数据库和数据表先创建数据库和数据表。具体操作如下:(1)启动SQLServer2008ManagementStudio,选择左上角的“新建查询”快捷按钮,打开SQL代码编辑器:Windows应用编程主讲:陈克力10.1一个简单的C#数据库应用程序10.1.1创建数据库和数据表(2)创建数据库MyDatabase和数据表student。Windows应用编程主讲:陈克力10.1一个简单的C#数据库应用程序10.1.1创建数据库和数据表创建数据库MyDatabase和数据表student的SQL代码如下:UseMaster;GOCREATEDatabaseMyDatabase;GOUseMyDatabase;GOCREATETABLEstudent(学号char(8)PRIMARYKEY,姓名varchar(8)NOTNULL,性别char(2)CHECK(性别='男'OR性别='女'),成绩numeric(4,1)CHECK(成绩=0AND成绩=100));GOWindows应用编程主讲:陈克力10.1一个简单的C#数据库应用程序10.1.1创建数据库和数据表INSERTINTOstudentVALUES('20102001','阎妮','女',98);INSERTINTOstudentVALUES('20102002','张有来','男',58);INSERTINTOstudentVALUES('20102003','王文喜','男',72);INSERTINTOstudentVALUES('20102004','赵敏','女',66);INSERTINTOstudentVALUES('20102005','罗莎','女',88.5);INSERTINTOstudentVALUES('20102006','蒙恬','男',93);GOWindows应用编程主讲:陈克力10.1一个简单的C#数据库应用程序10.1.2创建数据库应用程序(1)创建C#窗体应用程序MyDBApp,在窗体上添加一个DataGridView控件和Button控件,并适当调整它们的大小和位置,设置其Text属性(其他属性不用设置):Windows应用编程主讲:陈克力10.1一个简单的C#数据库应用程序10.1.2创建数据库应用程序(2)编写代码假设数据库服务器的名称为“mzq”,服务器的登录名和密码分别为“sa”和“sql2008”,则连接数据库MyDatabase并显示表student中数据的代码如下:privatevoidbutton1_Click(objectsender,EventArgse){//设置连接字符串stringConnectionString=DataSource=mzq;InitialCatalog=MyDatabase;+PersistSecurityInfo=True;UserID=sa;Password=sql2008;DataSetdataset=newDataSet();//创建数据集//创建一个新连接SqlConnectionconn=newSqlConnection(ConnectionString);Windows应用编程主讲:陈克力10.1一个简单的C#数据库应用程序10.1.2创建数据库应用程序try{//创建数据提供者SqlDataAdapterDataAdapter=newSqlDataAdapter(SELECT*FROMstudent,conn);//填充数据集dataset,并为本次填充的数据起名“student_table”DataAdapter.Fill(dataset,student_table);dataGridView1.DataSource=dataset;//在dataGridView1控件中显示名为student_table的填充数据dataGridView1.DataMember=student_table;}catch(Exceptionex){MessageBox.Show(ex.ToString());}finally{conn.Close();conn.Dispose();dataset.Dispose();}在数据集dataset中可以填充“多批”数据并给它们起名,此后通过它们的名称就可以实现对“多批”数据的访问操作。Windows应用编程主讲:陈克力10.1一个简单的C#数据库应用程序10.1.2创建数据库应用程序执行该程序,在运行界面上双击【浏览数据】按钮即可看到数据库MyDatabase中数据表student所包含的内容:——SqlConnection和DataSet实际上是ADO.NET组件包含的内容,因此要开发基于C#的数据库应用程序,需要对数据库及ADO.NET组件有一定的了解。Windows应用编程主讲:陈克力10.2数据库系统与ADO.NET概述10.2.1数据库系统数据库系统、数据库和数据库管理系统(DBMS)之间的关系:数据库系统是一种引进了数据库的计算机系统,其组成部分主要包括硬件、软件、数据库、系统涉及的人员等,其中,软件包括数据库管理系统(DBMS)和支持DBMS运行的其他相关软件,以及基于DBMS的应用程序等;数据库管理系统则是数据库的“操作系统”,是管理数据库的软件系统,如SQLServer2008、DB2、Oracle等都是数据库管理系统;数据库是多张数据表(table)的集合,每张数据表由若干行和若干列组成,一行称为一条记录(record/row),一列称为一个字段(field)。能唯一标识每条记录且不含空值(NULL)的一个或多个字段可以定义为主键,每张表至多有一个主键。可见,数据库系统是一个广泛的概念,凡是以数据库应用为核心的系统所涉及的部分都是它的组成部分。DBMS是数据库系统的一个组成部分,数据库则是DBMS管理的对象。Windows应用编程主讲:陈克力10.2数据库系统与ADO.NET概述10.2.2ADO.NET概述ADO.NET是在ADO的基础上发展而来的一种数据库访问接口,被认为是一个“跨时代的产品”。它提供了平台互用性和可伸缩的数据访问功能,可以使用它来访问关系数据库系统(如SQLServer2005、Oracle)和其他许多具有OLEDB或ODBC提供程序的数据源。ADO.NET只是一种接口、一种通道,要通过ADO.NET访问数据库还需要有相应的操纵语言,而这种语言就是SQL语言。本章下部分将先简要介绍SQL语言的常用语句,然后再介绍ADO.NET常用的几个对象,最后介绍如何使用这些对象操作数据库。Windows应用编程主讲:陈克力10.3SQL语言简介10.2.2ADO.NET概述SQL语言是关系数据库的标准查询语言,是面向非过程化的第四代语言(4GL)。SQL语言具有四大功能:数据查询、数据操纵、数据定义和数据控制,如下表所示。Windows应用编程主讲:陈克力10.3SQL语言简介10.3.1Select语句Select语句用于查询数据表中的数据,其格式如下:SELECT字段列表FROM表名[Where查询条件][ORDERBY字段名[ASC|DESC]]其中,Where子句是可选项。如果没有Where子句,则表示查询表中所有的记录,否则查询表中满足查询条件的记录;ORDERBY子句用于排序查询结果,ASC表示升序(默认),DESC表示降序。查询所有记录例如,下列语句是查询表student中的所有数据:Select*Fromstudent;符号“*”是代表所有的字段。此句也可以写成:Select学号,姓名,性别,成绩Fromstudent;Windows应用编程主讲:陈克力10.3SQL语言简介10.3.1Select语句Select语句用于查询数据表中的数据,其格式如下:SELECT字段列表FROM表名[Where查询条件][ORDERBY字段名[ASC|DESC]]其中,Where子句是可选项。如果没有Where子句,则表示查询表中所有的记录,否则查询表中满足查询条件的记录;ORDERBY子句用于排序查询结果,ASC表示升序(默认),DESC表示降序。查询所有记录例如,下列语句是查询表student中的所有数据:Select*Fromstudent;符号“*”是代表所有的字段。此句也可以写成:Select学号,姓名,性别,成绩Fromstudent;Windows应用编程主讲:陈克力10.3SQL语言简介10.3.1Select语句查询满足一定条件的记录如果要查询成绩在区间[60,70]内的学生,并列出他们的姓名和成绩信息,则可用下面的语句:Select姓名,成绩FromstudentWhere成绩=60and成绩70;排序查询结果查询成绩及格的学生,并按照成绩降序显示查询结果:Select*FromstudentWhere成绩=60ORDERBY成绩DESC;--DESC表示降序,ASC表示升序(默认设置)Windows应用编程主讲:陈克力10.3SQL语言简介10.3.1Select语句“模糊”查询“模糊”查询需要通过通配符来实现。通配符“%”可以匹配任意的字符串,例如,查询所有姓王的学生:SELECT*FROMstudentWHERE姓名LIKE'王%';通配符“_”则只能匹配一个字符,例如,查询姓王且姓名仅由两个字构成的学生:SELECT*FROMstudentWHERE姓名LIKE'王_';Windows应用编程主讲:陈克力10.3SQL语言简介10.3.1Select语句分组查询例如,按性别分组查询男、女的人数:SELECT性别,count(*)人数FROMstudentGROUPBY性别;空值查询空值查询是指查询记录在某个字段上取值是否为NULL。例如,查询缺少成绩的学生:SELECT*FROMstudentWHERE成绩ISNULLWindows应用编程主讲:陈克力10.3SQL语言简介10.3.2Insert语句该语句用于向数据表中添加数据,其格式如下:INSERT[INTO]表名(字段列表)VALUES(字段值列表);其中,字段列表和字段值列表中的项要一一对应。如果字段列表是数据表的所有字段名列表,且字段名顺序与表定义时的字段名顺序一样,那么字段列表可以省略。例如,如果要将下列记录插入的数据表student中('20102001','阎妮','女',98)则可以使用:INSERTINTOstudentVALUES('20102001','阎妮','女',98);它等价于:INSERTINTOstudent(学号,姓名,性别,成绩)VALUES('20102001','阎妮','女',98);Windows应用编程主讲:陈克力10.3SQL语言简介10.3.3Update语句该语句用于更新数据表中的数据,其格式如下:Update表名SET字段名1=值1,字段名2=值2,…字段名n=值n[Where更新条件]如果Update语句包含Where子句,则表示更新满足更新条件的记录的相关字段值,否则更新所有记录的相关字段值。例如,以下语句是对男同学的成绩减少5%:UPDATEstudentSET成绩=成绩-成绩*0.05WHERE性别='男';Windows应用编程主讲:陈克力10.3SQL语言简介10.3.4Delete语句该语句用于从数据表中删除部分或全部记录,格式如下:Delete[FROM]表名[Where删除条件];如果省略Where子句,则表示删除表中的所有记录,否则删除满足删除条件的记录。例如,下列语句将删除表stude