版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Windows应用编程应用编程 主讲:陈克力主讲:陈克力第第 10 章章 数据库开发技术数据库开发技术Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.1 一个简单的一个简单的C#数据库应用程序数据库应用程序10.2 数据库系统与数据库系统与ADO.NET概述概述10.3 SQL语言简介语言简介10.4 ADO.NET对象对象10.5 数据库操作举例数据库操作举例本本 章章 内内 容容Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.1 一个简单的C#数据库应用程序10.1.1 创建数据库和数据表创建数据库和数据表先创建数据库和数据表。具体操作如下:先创建数据库和数据表
2、。具体操作如下:(1)启动)启动SQL Server 2008 Management Studio,选择左上角,选择左上角的的“新建查询新建查询”快捷按钮,打开快捷按钮,打开SQL代码编辑器代码编辑器: Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.1 一个简单的C#数据库应用程序10.1.1 创建数据库和数据表创建数据库和数据表(2)创建数据库)创建数据库MyDatabase和数据表和数据表student。Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.1 一个简单的C#数据库应用程序10.1.1 创建数据库和数据表创建数据库和数据表创建数据库创建数据库MyDa
3、tabase和数据表和数据表student的的SQL代码如下:代码如下:Use Master;GOCREATE Database MyDatabase;GOUse MyDatabase;GOCREATE TABLE student(学号学号 char(8) PRIMARY KEY,姓名姓名 varchar(8) NOT NULL,性别性别 char(2) CHECK(性别性别 = 男男 OR 性别性别 = 女女),成绩成绩 numeric(4,1) CHECK(成绩成绩 = 0 AND 成绩成绩 =60 and 成绩成绩=60ORDER BY 成绩成绩 DESC; -DESC表示降序,表示降序
4、,ASC表示升序表示升序(默认设置)(默认设置)Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.3 SQL语言简介10.3.1 Select语句语句l“模糊模糊”查询查询 “模糊模糊”查询需要通过通配符来实现。通配符查询需要通过通配符来实现。通配符“%”可以匹配可以匹配任意的字符串,例如,查询所有姓王的学生:任意的字符串,例如,查询所有姓王的学生:SELECT *FROM studentWHERE 姓名姓名 LIKE 王王%;通配符通配符“_”则只能匹配一个字符,例如,查询姓王且姓名仅则只能匹配一个字符,例如,查询姓王且姓名仅由两个字构成的学生:由两个字构成的学生:SELECT
5、*FROM studentWHERE 姓名姓名 LIKE 王王_;Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.3 SQL语言简介10.3.1 Select语句语句l分组查询分组查询 例如,按性别分组查询男、女的人数:例如,按性别分组查询男、女的人数:SELECT 性别性别, count(*) 人数人数 FROM studentGROUP BY 性别性别;l空值查询空值查询 空值查询是指查询记录在某个字段上取值是否为空值查询是指查询记录在某个字段上取值是否为NULL。例。例如,查询缺少成绩的学生:如,查询缺少成绩的学生:SELECT *FROM studentWHERE 成绩成
6、绩 IS NULLWindows应用编程应用编程 主讲:陈克力主讲:陈克力10.3 SQL语言简介10.3.2 Insert语句语句该语句用于向数据表中添加数据,其格式如下:该语句用于向数据表中添加数据,其格式如下:INSERT INTO 表名表名(字段列表字段列表) VALUES(字段值列表字段值列表);其中,字段列表和字段值列表中的项要一一对应。如果字段列其中,字段列表和字段值列表中的项要一一对应。如果字段列表是数据表的所有字段名列表,且字段名顺序与表定义时的字表是数据表的所有字段名列表,且字段名顺序与表定义时的字段名顺序一样,那么字段列表可以省略。段名顺序一样,那么字段列表可以省略。例如
7、,如果要将下列记录插入的数据表例如,如果要将下列记录插入的数据表student中中(20102001,阎妮阎妮,女女, 98) 则可以使用:则可以使用:INSERT INTO student VALUES(20102001,阎妮阎妮,女女, 98);它等价于:它等价于:INSERT INTO student(学号学号,姓名姓名,性别性别,成绩成绩) VALUES(20102001,阎妮阎妮,女女, 98);Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.3 SQL语言简介10.3.3 Update语句语句该语句用于更新数据表中的数据,其格式如下:该语句用于更新数据表中的数据,其格
8、式如下:Update 表名表名SET 字段名字段名1 = 值值1,字段名字段名2 = 值值2, 字段名字段名n = 值值nWhere 更新条件更新条件 如果如果Update语句包含语句包含Where子句,则表示更新满足更新条件的记录的相子句,则表示更新满足更新条件的记录的相关字段值,否则更新所有记录的相关字段值。关字段值,否则更新所有记录的相关字段值。例如,以下语句是对男同学的成绩减少例如,以下语句是对男同学的成绩减少5%:UPDATE studentSET 成绩成绩 = 成绩成绩 - 成绩成绩 * 0.05WHERE 性别性别 = 男男;Windows应用编程应用编程 主讲:陈克力主讲:陈克
9、力10.3 SQL语言简介10.3.4 Delete语句语句该语句用于从数据表中删除部分或全部记录,格式如下:该语句用于从数据表中删除部分或全部记录,格式如下:Delete FROM 表名表名 Where 删除条件删除条件;如果省略如果省略Where子句,则表示删除表中的所有记录,否则删除子句,则表示删除表中的所有记录,否则删除满足删除条件的记录。满足删除条件的记录。例如,下列语句将删除表例如,下列语句将删除表student中所有成绩不及格的学生记录:中所有成绩不及格的学生记录:Delete From student Where 成绩成绩60;而下列语句则表示清空表而下列语句则表示清空表stu
10、dent中的所有数据:中的所有数据:Delete From student;Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.1 ADO.NET体系结构体系结构ADO.NET就是就是.NET Framework类库中用于实现对数据库中的类库中用于实现对数据库中的数据进行操作的一些类的集合。它分为两个部分:数据进行操作的一些类的集合。它分为两个部分:uDataSet对象对象:是内存中以:是内存中以“表格的形式表格的形式”保存一批批的数据,保存一批批的数据,也可以理解为若干张数据表(也可以理解为若干张数据表(DataTable)的集合,每张数据表)的集合
11、,每张数据表也有自己的也有自己的“表名表名”;u数据提供者数据提供者:包含许多针对数据源的组件,应用程序主要是:包含许多针对数据源的组件,应用程序主要是通过这些组件来完成针对指定数据源的连接、提取数据、操作通过这些组件来完成针对指定数据源的连接、提取数据、操作数据、执行数据命令。这些组件主要包括数据、执行数据命令。这些组件主要包括Connection、Command、DataReader和和DataAdapter。Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.1 ADO.NET体系结构体系结构ADO.NET体系结构:体系结构:Windows应用编
12、程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.2 Connection对象对象Connection对象用于连接数据库,不同的数据库有不同的对象用于连接数据库,不同的数据库有不同的Connection对象:对象:uSQL Server数据库数据库SqlConnection对象对象uAccess数据库数据库OleDbConnection对象对象/创建连接到创建连接到SQL Server数据库的数据库的Connection对象对象string ConnectionString = Data Source=mzq;Initial Catalog=MyDatabase; +P
13、ersist Security Info=True;User ID=sa;Password=sql2008;SqlConnection conn = new SqlConnection(ConnectionString); /创建连接到创建连接到Access数据库的数据库的Connection对象对象string ConnectionString = Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:book.mdb;OleDbConnection conn = new OleDbConnection(ConnectionString);Window
14、s应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.2 Connection对象对象Connection对象有两个重要的方法:对象有两个重要的方法:uOpen()方法:打开与数据库的连接方法:打开与数据库的连接uClose()方法:关闭与数据库的连接方法:关闭与数据库的连接如:如:conn.Open();conn.Close();Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.3 Command对象对象该对象用于执行针对数据库的该对象用于执行针对数据库的SQL命令。其常用属性有:命令。其常用属性有:Connection
15、属性属性用于设置用于设置Command对象所依赖的连接对象,如:对象所依赖的连接对象,如:SqlCommand command = new SqlCommand();command.Connection = conn;CommandText属性属性 用于设置用于设置Command对象要执行的命令文本,如:对象要执行的命令文本,如:command.CommandText = Select * From student;Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.3 Command对象对象CommandTimeOut属性属性用于设置或返回终止执行命
16、令之前需要等待的时间(单位为秒),默认为用于设置或返回终止执行命令之前需要等待的时间(单位为秒),默认为30。CommandType 属性属性CommandType属性用于决定属性用于决定CommandText属性值的格式:属性值的格式:Text:表示:表示CommandText 属性值为属性值为SQL语句语句StoredProcedure:表示:表示CommandText 属性值为存储过程属性值为存储过程TableDirect:表示:表示CommandText 属性值为要读取的表。属性值为要读取的表。例如:例如:command.CommandType = CommandType.Text;
17、Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.3 Command对象对象常用方法包括:常用方法包括:构造函数构造函数有多个重载版本,以有多个重载版本,以SqlCommand对象为例,其主要版本包括:对象为例,其主要版本包括:public SqlCommand() public SqlCommand(string cmdText)public SqlCommand(string cmdText, SqlConnection connection)其中,第一构造函数用于创建一个其中,第一构造函数用于创建一个SqlCommand对象,但没有做对象,但没
18、有做其他的初始化工作;第二个是在创建对象的同时用参数其他的初始化工作;第二个是在创建对象的同时用参数cmdText定义命令文本初始化;第三个则是在创建的同时用用参数定义命令文本初始化;第三个则是在创建的同时用用参数cmdText定义命令文本和已有的定义命令文本和已有的SqlConnection对象初始化。对象初始化。Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.3 Command对象对象例如,假设例如,假设strSQL已经定义如下:已经定义如下:string strSQL = INSERT INTO student VALUES(20102001
19、,阎妮阎妮,女女, 98);且且conn是已经创建的是已经创建的SqlConnection对象,则下面三组语句是等价的:对象,则下面三组语句是等价的:/第一组第一组SqlCommand command = new SqlCommand();command.Connection = conn;command.CommandText = strSQL;/第二组第二组SqlCommand command = new SqlCommand(strSQL);command.Connection = conn;/第三组第三组SqlCommand command = new SqlCommand(strSQ
20、L, conn);Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.3 Command对象对象ExecuteNonQuery()方法方法该方法用于执行没有返回结果集的该方法用于执行没有返回结果集的SQL语句,如建表语句、语句,如建表语句、Insert、Update、Delete语句等。这些命令的文本是在语句等。这些命令的文本是在CommandText属性中设置属性中设置的。其返回结果是执行命令后受到影响的行数。的。其返回结果是执行命令后受到影响的行数。例如:例如:string ConnectionString = Data Source=mzq;In
21、itial Catalog=MyDatabase; +Persist Security Info=True;User ID=sa;Password=sql2008;SqlConnection conn = new SqlConnection(ConnectionString);string strSQL = INSERT INTO student VALUES(20102001,阎妮阎妮,女女, 98);SqlCommand command = new SqlCommand();command.Connection = conn;command.CommandText = strSQL;con
22、n.Open();int n = command.ExecuteNonQuery();/执行执行SQL语句语句Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.4 DataReader对象对象DataReader对象的优点对象的优点:执行效率高,在体积和开销上它比数:执行效率高,在体积和开销上它比数据集小,占用内存少据集小,占用内存少DataReader对象的缺点对象的缺点:在读取数据时它与服务器的连接始终:在读取数据时它与服务器的连接始终是打开的,它只能以单向向前的次序访问记录,所以仅用于数是打开的,它只能以单向向前的次序访问记录,所以仅用于数据检
23、索等功能非常单一的设计中。据检索等功能非常单一的设计中。DataReader对象常用的属性和方法包括:对象常用的属性和方法包括:FieldCount属性属性返回字段的数目。返回字段的数目。IsClosed属性属性返回返回DataReader对象是否关闭的状态,如果关闭则返回对象是否关闭的状态,如果关闭则返回true,否则返回否则返回false。RecordsAffected属性属性返回执行返回执行insert、delete 或或update后受到影响的行数。后受到影响的行数。Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.4 DataReader对
24、象对象CLose()方法方法用于关闭用于关闭DataReader对象。对象。GetDataTypeName(n)方法方法返回第返回第n +1列的源数据类型名称。列的源数据类型名称。GetFileType(n)方法方法返回第返回第n +1列的数据类型。列的数据类型。GetName(n)方法方法返回返回n +1列的字段名称。列的字段名称。GetOrdinal(name)方法方法返回字段名称为返回字段名称为name的字段列号。的字段列号。GetValue(int n)方法方法返回当前行中第返回当前行中第n+1列的内容。由列的内容。由Read()方法决定当前行。方法决定当前行。GetValues(ob
25、ject arrays)方法方法返回所有字段的内容,并将内容放在返回所有字段的内容,并将内容放在arrays数组中,数组大小与字段数目相等。数组中,数组大小与字段数目相等。IsDBNull(int n)方法方法判断当前行中第判断当前行中第n+1列是否为列是否为Null,为,为Null则返回则返回true,否则返回,否则返回false。 Read()方法方法把记录指针往下一行移动,如果下一行没有了,则返回把记录指针往下一行移动,如果下一行没有了,则返回false,否则返回,否则返回true。使。使用该方法可以从查询结果中读取数据。用该方法可以从查询结果中读取数据。Windows应用编程应用编程
26、主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.4 DataReader对象对象例如,下面代码先利用例如,下面代码先利用Command对象执行对象执行Select语句,并将返回的结果语句,并将返回的结果集放到集放到DataReader对象中,然后利用对象中,然后利用DataReader对象提供的属性和方法对象提供的属性和方法逐行、逐项提取结果集中的数据,并显示到逐行、逐项提取结果集中的数据,并显示到ListBox对象中。对象中。 string ConnectionString = Data Source=mzq;Initial Catalog=MyDatabase;+Persis
27、t Security Info=True; User ID=sa; Password=sql2008;SqlConnection conn = new SqlConnection(ConnectionString);string strSQL = SELECT * FROM student;SqlCommand Command = new SqlCommand(strSQL, conn);conn.Open();SqlDataReader reader = Command.ExecuteReader();/结果集放到结果集放到reader对象中对象中object row = new objec
28、treader.FieldCount; while(reader.Read()=true) reader.GetValues(row); /获取结果集的当前行获取结果集的当前行 for (int i = 0; i reader.FieldCount; i+) listBox1.Items.Add(rowi.ToString(); /将逐项输出行中的项将逐项输出行中的项 listBox1.Items.Add(-);Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.5 DataAdapter对象对象DataAdapter对象除了可以实现对象除了可以实现D
29、ataReader对象的功能以外,还对象的功能以外,还可以执行对数据库的插入、更新和删除等操作,其功能要比可以执行对数据库的插入、更新和删除等操作,其功能要比DataReader对象的功能强得多(要与对象的功能强得多(要与DataSet对象结合使用)。对象结合使用)。但强功能的实现就意味着要付出更多的机器资源,使用起来就但强功能的实现就意味着要付出更多的机器资源,使用起来就显得特别显得特别“沉重沉重”。因此,。因此,如果如果DataReader对象已经能完成的对象已经能完成的任务就不必使用任务就不必使用DataAdapter对象对象。Windows应用编程应用编程 主讲:陈克力主讲:陈克力10
30、.4 ADO.NET对象10.4.5 DataAdapter对象对象DataAdapter对象的主要属性和方法包括:对象的主要属性和方法包括:构造函数构造函数DataAdapter对象的构造函数有四个重载版本对象的构造函数有四个重载版本:public SqlDataAdapter() public SqlDataAdapter(SqlCommand selectCommand)public SqlDataAdapter(string selectCommandText, SqlConnection selectConnection)public SqlDataAdapter(string se
31、lectCommandText, string selectConnectionString)其中,参数其中,参数selectCommand用于设置实现用于设置实现Select语句的命令对象语句的命令对象(SqlCommand类型),类型),selectCommandText用于设置用于设置Select语句文本,语句文本,selectConnection用于设置连接对象。用于设置连接对象。Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.5 DataAdapter对象对象例如,下面四组语句是等价的(其作用都是从数据表例如,下面四组语句是等价的(其作用
32、都是从数据表student提提取所有的数据):取所有的数据):/第一组第一组SqlDataAdapter DataAdapter = new SqlDataAdapter();DataAdapter.SelectCommand = cmd;/第二组第二组SqlDataAdapter DataAdapter = new SqlDataAdapter(cmd);/第三组第三组SqlDataAdapter DataAdapter = new SqlDataAdapter(strSQL, conn);/第四组第四组SqlDataAdapter DataAdapter = new SqlDataAdap
33、ter(strSQL, ConnectionString);Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.5 DataAdapter对象对象DeleteCommand属性属性 用于获取或设置一个用于获取或设置一个 SQL 语句或存储过程,以从数据集中删除记录。而语句或存储过程,以从数据集中删除记录。而要执行相应的要执行相应的SQL语句和存储过程,可调用语句和存储过程,可调用ExecuteNonQuery()来实现。来实现。例如,从表例如,从表student中删除学号为中删除学号为20102002的记录,可以用下列代码实现的记录,可以用下列代码实现
34、:string ConnectionString = Data Source=mzq;Initial Catalog=MyDatabase; +Persist Security Info=True;User ID=sa;Password=sql2008;SqlConnection conn = new SqlConnection(ConnectionString);conn.Open();SqlDataAdapter DataAdapter = new SqlDataAdapter();SqlCommand cmd = new SqlCommand();cmd.Connection = con
35、n;cmd.CommandText = delete from student where 学号学号 = 20102002;DataAdapter.DeleteCommand = cmd;int n = DataAdapter.DeleteCommand.ExecuteNonQuery();MessageBox.Show(有条有条 + n.ToString() + 记录被删除!记录被删除!);Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.5 DataAdapter对象对象InsertCommand和和UpdateCommand属性属性这两个属性也
36、是用于获取或设置一个这两个属性也是用于获取或设置一个SQL语句或存储过程,但语句或存储过程,但前者用于实现向数据源插入记录,后者用于更新记录。它们的前者用于实现向数据源插入记录,后者用于更新记录。它们的使用方法与使用方法与DeleteCommand属性相同。属性相同。SelectCommand属性属性获取或设置一个获取或设置一个SQL语句或存储过程,用于在数据源中选择一语句或存储过程,用于在数据源中选择一个记录集。个记录集。例如,执行下列代码后,将数据表例如,执行下列代码后,将数据表student中的数据提取到中的数据提取到DataAdapter对象中:对象中:string Connectio
37、nString = Data Source=mzq;Initial Catalog=MyDatabase; + Persist Security Info=True;User ID=sa;Password=sql2008; SqlConnection conn = new SqlConnection(ConnectionString);conn.Open();SqlCommand cmd = new SqlCommand();cmd.Connection = conn;cmd.CommandText = SELECT * FROM student; SqlDataAdapter DataAda
38、pter = new SqlDataAdapter();DataAdapter.SelectCommand = cmd;Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.5 DataAdapter对象对象Fill()方法方法执行执行SelectCommand中的查询,并将结果填充到中的查询,并将结果填充到DataSet对象的一个数据对象的一个数据表(表(DataTable)中。)中。DataSet对象可以理解为元素为对象可以理解为元素为DataTable类型的数类型的数组,每次填充时是按照既定的设置将结果集填充到对应的元素中。该方组,每次填充时是按照
39、既定的设置将结果集填充到对应的元素中。该方法有多个重载版本,其中常用的有两种:法有多个重载版本,其中常用的有两种:Fill(DataSet dataset)Fill(DataSet dataset, string srcTable)其中,参数其中,参数srcTable是用于设置所填充的数据表的名称。是用于设置所填充的数据表的名称。例如,下列语句都是将例如,下列语句都是将DataAdapter中的数据填充到中的数据填充到dataset对象中,但对象中,但这两次填充分别位于这两次填充分别位于dataset对象不同的两个数据表中,表名分别为对象不同的两个数据表中,表名分别为t1和和t2:DataAd
40、apter.Fill(dataset, t1);DataAdapter.Fill(dataset, t2);Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.5 DataAdapter对象对象Update()方法方法该方法向数据库提交存储在该方法向数据库提交存储在DataSet(或或DataTable、DataRows)中的更改。中的更改。该方法会返回一个整数值,表示成功更新的记录的数量。该方法会返回一个整数值,表示成功更新的记录的数量。但在执行该方法之前,要先形成相应的但在执行该方法之前,要先形成相应的Update语句,语句文本保存在语句,语句文本
41、保存在UpdateCommand属性中。属性中。Update语句的生成可有语句的生成可有SqlCommandBuilder的的构造函数自动完成。构造函数自动完成。 例如:例如:SqlCommandBuilder builder = new SqlCommandBuilder(DataAdapter);DataAdapter.Update(dataset, Table);Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.6 DataSet对象对象u每一个每一个DataSet对象通常是一个或多张数据表(对象通常是一个或多张数据表(DataTable 对象
42、)的集对象)的集合。合。u当当DataAdapter对象将数据填充到对象将数据填充到DataSet对象以后,就可以利用对象以后,就可以利用DataSet对象提供的属性和方法对数据进行离线或在线操作。这些操作可对象提供的属性和方法对数据进行离线或在线操作。这些操作可以是查询记录、添加记录、修改记录和删除记录,并通过以是查询记录、添加记录、修改记录和删除记录,并通过DataAdapter对对象的象的Update()方法可以将对记录的更新结果提交到数据库中。方法可以将对记录的更新结果提交到数据库中。以下介绍以下介绍DataSet对象的数据提取和更新功能:对象的数据提取和更新功能:(1)获取)获取Da
43、taSet对象中所有的数据表(对象中所有的数据表(DataTable对象)对象)下面代码是获取对象下面代码是获取对象dataset中的所有数据表:中的所有数据表:for (int i = 0; i dataset.Tables.Count; i+) DataTable dt = dataset.Tablesi; /获取所有的数据表获取所有的数据表 listBox1.Items.Add(dt.ToString(); /将表名输出到将表名输出到listBox1中中其中,其中,dataset.Tables.Count返回返回dataset中表的数量,中表的数量,dataset.Tablesi返返回索
44、引为回索引为i的数据表(的数据表(DataTable对象)。对象)。Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.6 DataSet对象对象(3)提取指定数据表中的所有数据项)提取指定数据表中的所有数据项下面代码是提取对象下面代码是提取对象dataset中数据表中数据表t2的所有数据项:的所有数据项:for (int i = 0; i dataset.Tablest2.Rows.Count; i+) DataRow dr = dataset.Tablest2.Rowsi; /获取索引为获取索引为i的行的行 string s = ; for (in
45、t j = 0; j dataset.Tablest2.Columns.Count; j+) s += drj.ToString() + t; /获取行获取行dr中索引为中索引为j的数据项的数据项 listBox1.Items.Add(s);其中,其中,dataset.Tablest2.Rows.Count返回表返回表t2的行数,的行数,dataset.Tablest2.Rowsi返回索引为返回索引为i的行,的行,dataset.Tablest2.Columns.Count返回表的列数。返回表的列数。 Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4
46、.6 DataSet对象对象(4)数据绑定)数据绑定绑定方法一绑定方法一:利用控件的:利用控件的DataBindings属性的属性的Add方法把方法把DataSet中某一中某一个数据表中的某一行和组件的某个属性绑定起来,从而达到显示数据的个数据表中的某一行和组件的某个属性绑定起来,从而达到显示数据的效果。效果。例如,下列语句将例如,下列语句将dataset中表中表t2的的“姓名姓名”字段绑定到控件字段绑定到控件textBox1的的Text属性中:属性中:textBox1.DataBindings.Add(Text, dataset, t2.t_name);绑定方法二绑定方法二:将数据绑定到:将
47、数据绑定到DataGridView控件中,即将控件的控件中,即将控件的DataSource属性值设置为相应的属性值设置为相应的DataSet对象,将控件的对象,将控件的DataMember属属性值设置为性值设置为DataSet对象中的表名。对象中的表名。例如,下列语句是将例如,下列语句是将dataset中数据表中数据表t2中的数据显示到控件中的数据显示到控件dataGridView1中:中:dataGridView1.DataSource = dataset;dataGridView1.DataMember = t2;Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.N
48、ET对象10.4.6 DataSet对象对象(5)数据更新)数据更新可以利用可以利用DataAdapter对象的对象的Update()方法来保存在方法来保存在DataSet对象所作的更对象所作的更新。新。例如:例如:DataAdapter.Fill(dataset, t2);dataGridView1.DataSource = dataset; dataGridView1.DataMember = t2; /将数据显示在将数据显示在dataGridView1/在对控件在对控件dataGridView1中的数据进行修改后,可以用下列语句将更新保存到数据库中的数据进行修改后,可以用下列语句将更新保
49、存到数据库SqlCommandBuilder builder = new SqlCommandBuilder(DataAdapter); /此句不能缺少此句不能缺少DataAdapter.Update(dataset, t2); /将所作的更新保存到数据库中将所作的更新保存到数据库中 在调用在调用Update()方法更新数据时,要保证方法更新数据时,要保证Select返回的结果集包含返回的结果集包含主健列(当然,对应的数据表要定义主健),否则会出现这样的异常主健列(当然,对应的数据表要定义主健),否则会出现这样的异常提示信息:提示信息:“对于不返回任何键列信息的对于不返回任何键列信息的Sele
50、ctCommand不支持不支持UpdateCommand的动态的动态 SQL 生成生成!”。 Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.6 DataSet对象对象【例【例10.1】 DataSet对象的使用方法。对象的使用方法。本例将综合上面介绍有关本例将综合上面介绍有关DataSet对象的使用方法。对象的使用方法。该程序要展示的功能是该程序要展示的功能是:将两个数据源(对应数据库:将两个数据源(对应数据库MyDatabase中的表中的表student和表和表teacher)的数据分别填充到)的数据分别填充到DataSet对象中,形成该对象中
51、的对象中,形成该对象中的两个表两个表t1和表和表t2;然后提取;然后提取t1的所有字段名以及的所有字段名以及t1中所有的数据项,并显中所有的数据项,并显示在示在listBox1控件中;最后将控件中;最后将t2绑定到绑定到dataGridView1控件并显示控件并显示t1中的数中的数据,同时将表据,同时将表t2中的字段中的字段t_name绑定到绑定到textBox1并显示该字段的数据项。并显示该字段的数据项。 Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.6 DataSet对象对象创建步骤如下:创建步骤如下:(1)创建窗体应用程序)创建窗体应用程序
52、DataSetApp,在窗体上添加,在窗体上添加Button、TextBox、DataGridView和和ListBox,并适当设置它们的属性、位置和大小:,并适当设置它们的属性、位置和大小:Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.6 DataSet对象对象创建步骤如下:创建步骤如下:(2)编写代码(以下是核心代码):)编写代码(以下是核心代码): private void button1_Click(object sender, EventArgs e) SqlConnection conn = null; SqlDataAdapter
53、DataAdapter = null; DataSet dataset = null; try string ConnectionString = Data Source=mzq; + Initial Catalog=MyDatabase;Persist Security Info=True; + User ID=sa;Password=sql2008; conn = new SqlConnection(ConnectionString); conn.Open(); DataAdapter = new SqlDataAdapter(); dataset = new DataSet(); Sql
54、Command cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = SELECT * FROM student; DataAdapter.SelectCommand = cmd; DataAdapter.Fill(dataset, t1); /第一次填充第一次填充 Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.6 DataSet对象对象 cmd.CommandText = SELECT * FROM teacher; DataAdapter.SelectCommand
55、= cmd; DataAdapter.Fill(dataset, t2); /第二次填充第二次填充 string s = ; /获取表获取表t1中的所有列名中的所有列名 for (int i = 0; i dataset.Tablest1.Columns.Count; i+) s += dataset.Tablest1.Columnsi.ToString() + t; listBox1.Items.Add(s); /提取表提取表t1中的数据项中的数据项 for (int i = 0; i dataset.Tables0.Rows.Count; i+) DataRow dr = dataset.
56、Tables0.Rowsi; s = ; for (int j = 0; j dataset.Tables0.Columns.Count; j+) s += drj.ToString() + t; listBox1.Items.Add(s); Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.6 DataSet对象对象 /将表将表t2中的字段中的字段t_name绑定到绑定到textBox1 textBox1.DataBindings.Add(Text, dataset, t2.t_name); /将将dataset绑定到绑定到dataGridView
57、1 dataGridView1.DataSource = dataset; /在在dataGridView1中显示表中显示表t2中的数据中的数据 dataGridView1.DataMember = t2; catch (Exception ex) MessageBox.Show(ex.Message); finally if (conn != null) conn.Dispose(); if (dataset != null) dataset.Dispose(); if (DataAdapter != null) DataAdapter.Dispose(); Windows应用编程应用编程
58、主讲:陈克力主讲:陈克力10.4 ADO.NET对象10.4.6 DataSet对象对象该程序的运行结果该程序的运行结果 :Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.5 数据库操作举例10.5.1 数据检索数据检索数据检索是指按照既定的检索条件查询满足要求的记录的过程。请考虑数据检索是指按照既定的检索条件查询满足要求的记录的过程。请考虑下面的例子。下面的例子。【例【例10.2】 数据检索的例子。数据检索的例子。 创建窗体应用程序创建窗体应用程序DataSearching,在窗体上添加,在窗体上添加Label控件和控件和ComboBox控件各两个,控件各两个,TextBox、
59、Button和和DataGridView控件各一个,控件各一个,并适当设置它们的相关属性、大小和位置:并适当设置它们的相关属性、大小和位置:Windows应用编程应用编程 主讲:陈克力主讲:陈克力10.5 数据库操作举例10.5.1 数据检索数据检索数据检索是指按照既定的检索条件查询满足要求的记录的过程。请考虑数据检索是指按照既定的检索条件查询满足要求的记录的过程。请考虑下面的例子。下面的例子。【例【例10.2】 数据检索的例子。数据检索的例子。 核心代码:核心代码: public partial class Form1 : Form private string ConnectionStri
60、ng = Data Source=mzq; + Initial Catalog=MyDatabase;Persist Security Info=True; + User ID=sa;Password=sql2008; private SqlConnection conn = null; private SqlDataAdapter DataAdapter = null; private DataSet dataset = null; private SqlCommand cmd = null; public Form1() InitializeComponent(); 数据库连接字符串数据库
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水生动物病害防治员岗前岗位适应能力考核试卷含答案
- 陶瓷注浆成型工安全实操能力考核试卷含答案
- 煤提质工安全生产能力知识考核试卷含答案
- 井下作业工具工保密知识考核试卷含答案
- 注聚工岗前标准化考核试卷含答案
- 医学26年:血常规结果解读要点 查房课件
- 乳制品市场深度解析-探索增长策略与消费者趋势
- 2023年广东省初级主治医师妇产科基础知识模拟试题
- 2026 减脂期猪心课件
- 2025年八省适应性考试语文试题
- 2026广西梧州苍海投资集团有限责任公司招聘总会计师1人笔试模拟试题及答案解析
- 《AQ3067-2026化工和危险化学品重大生产安全事故隐患判定准则》解读
- YDT 5102-2024 通信线路工程技术规范
- 中小学艾滋病防护知识
- Waters2695高效液相色谱仪操作规程
- 宽宽窄窄量量看
- 2023年十堰市郧阳区事业单位真题及答案
- 性传播疾病病症处理
- 中国国防建设
- 小说《摩登情书》全文
- 第四种检查器介绍
评论
0/150
提交评论