800 likes | 1.03k Views
ASP.NET 程序设计教程 闫宏亮 潘勇 主编. 上海交通大学出版社. 第 9 章 数据库编程. 9.1 连接数据库 9.2 执行 SQL 命令 9.3 使用 DataReader 对象访问数据 9.4 ADO.NET 数据集 9.5 数据显示. 内容. 本章主要介绍了 ASP.NET 编程的数据库访问操作的步骤和方法 ,并重点讲解应用 ADO.NET 模型进行 Web 数据库应用设计 ,以及数据显示控件的使用方法。. 9. 1 连接数据库.
E N D
ASP.NET程序设计教程闫宏亮 潘勇 主编 上海交通大学出版社
第9章 数据库编程 9.1 连接数据库 9.2 执行SQL命令 9.3 使用DataReader对象访问数据 9.4 ADO.NET数据集 9.5 数据显示
内容 本章主要介绍了ASP.NET编程的数据库访问操作的步骤和方法 ,并重点讲解应用ADO.NET模型进行Web数据库应用设计 ,以及数据显示控件的使用方法。
9. 1 连接数据库 • 每个需要和数据库进行交互的应用程序都必须先建立与数据库的连接,对于不同的数据源,ASP.NET提供了不同的类来建立连接。 • OleDbConnection对象 • SqlConnection对象
9.1.1 Connection对象简介 1、SqlConnection和OleDbConnection类对象定义的语法格式 • SqlConnection类对象定义的语法格式为: SqlConnection 对象名=new SqlConnection ([ConnectionString]) • OleDbConnection类对象定义的语法格式为: OleDbConnection 对象名=new OleDbConnection ([ConnectionString])
如果连接OLE DB数据源,ConnectionString属性通常包含以下参数: 1) Provider:设置数据源的OLE DB驱动程序,该参数不能省略。Access的驱动程序为“Microsoft.Jet.OLEDB.4.0”,SQL Server6.5或之前版本的驱动程序为“SQLOLEDB”,Oracle数据库的驱动程序为“MSDAORA”。 2) Data Source:设置数据源的实际路径。 3) User ID:设置登录数据库的账号。 4) Password:设置登录数据库的密码。
2、Connection对象的属性、方法和事件 表9.1 Connection对象的常用属性
9.1.2 连接ACCESS数据库 //程序清单9-1: using System.Data; using System.Data.OleDb; //连接Access数据库需要导入额外的命名空间,必须带此两条using命令。 public void OleDbConnectionOpen( ) { string strConnection="Provider=Microsoft.Jet.OleDb.4.0;"; strConnection+=@"Data Source=C:\BegASPNET\Person.mdb"; //建立连接对象objConnection,以后对数据库的操作都要用到该对象 OleDbConnection objConnection=new OleDbConnection(strConnection); objConnection.Open(); //调用对象objConnection的open()方法打开连接 } …… objConnection.Close();//关闭连接
9.1.3 连接SQL Server数据库 //程序清单9-2: using System.Data; using System.Data.SqlClient; Public void SqlConnectionOpen( ) { string strConnection="User ID=sa;Password=;"; strConnection+="Initial Catalog=Northwind;Server=MySQLServer;"; strConnection+="Connection Timeout=30"; SqlConnection objConnection=new SqlConnection(strConnection); objConnection.Open( ); } …… objConnection.Close( );
说明:在连接数据库的过程中,连接字符串可以在类的构造函数中指定,如上述两种连接方法;另外,在.NET开发环境中,SqlConnection和OleDbConnection是数据库连接控件,位于“数据”控件箱中,因此连接字符串也可在ConnectionString属性中指定。但无论采用哪种方式指定连接字符串的值,都必须显式调用Open( )方法和Close( )方法来打开和关闭连接。
9.2 执行SQL命令 • 数据库访问是程序中应用最普遍的部分,成功地连接数据库之后,就可以直接编写代码进行数据处理,通常有两种方式,其中一种是在保持连接的状态下利用Command对象执行SQL命令或存储过程,再通过返回的各种结果对象来访问数据库。 • 本节将示范四种最基础的数据库操作:读取、插入、更新数据及删除数据。
在ADO.NET中一般使用Command对象执行SQL命令并从数据源中返回结果。 • 常用的SQL命令如SELECT、UPDATE、NSERT、DELETE等都可以在Command对象中创建。
创建Command对象的语法格式 • 1) OLE DB数据库: OleDbCommand 对象名=new OleDbCommand(cmdText,connection) • 2) SQL SERVER数据库: SqlCommand 对象名=new SqlCommand(cmdText,connection)
Command对象的属性和方法 表9.4 Command对象的常用属性
[例9.1] 返回Northwind数据库的Employees表中的所有记录。 //程序清单9-3: //生成SqlCommand对象cmd SqlCommand cmd = new SqlCommand ( ); // 给CommandText属性赋值 cmd.CommandText =”employees”; //指定命令类型属性为表名 cmd.CommandType = Command.TableDirect; // 9.1节定义的Connection对象 cmd.Connection = objConnection;
以上代码的执行结果是返回employees表中所有的记录。它等价于以下代码:以上代码的执行结果是返回employees表中所有的记录。它等价于以下代码: //程序清单9-4: SqlCommand cmd = new SqlCommand( ); cmd.CommandText =“Select * from employees”; cmd.CommandType = Command.Text; cmd.Connection = objConnection;
执行SQL命令 1、ExecuteNonQuery( ):可以通过该命令来执行除了SELECT查询以外(如UPDATE,INSERT和DELETE)的SQL命令。 [例9.2] 删除employees表中所有TitleofCourtesy字段值为Ms.的记录。
思路: (1) 创建并打开一个SqlConnection对象; (2) 创建一个修改数据库中记录的SQL语句; (3) 创建一个SqlCommand对象; (4) 通过此SqlCommand对象完成对更改一条记录到数据库的操作。
执行SQL命令 2、ExecuteScalar( ):用来执行SELECT查询命令,但返回的是一个单值,多用于查询聚合值的情况,如用到count( )或sum( )函数的SQL命令。比如: int Num; CommandText="select count( * ) from employees where city=’London’ "; Num=( int ) ExecuteScalar( ); 3、ExecuteReader( ):该方法返回一个DataReader对象,根据使用的提供者不同,返回一个SqlDataReader对象或者OleDbDataReader对象。DataReader提供了只向前的快速读取数据库中数据的方法,如果只是为了读取数据库中的内容,最后使用这种方法。
9.3 使用DataReader对象访问数据 • ADO.NET有两种访问数据源的方式,分别为: • DataReader对象 • DataSet对象。
9.3.1 DataReader对象的属性和方法 表9.6 DataReader对象的常用属性
9.3.2 使用DataReader对象访问数据 • DataReader对象的创建方法: 1) 建立数据库链接,可以选SQLConnection或者OLedbConnection。 2) 使用Connection对象的open方法打开数据库链接。 3) 将查询保存在SQLCommand或者OledbCommand对象中。 4) 调用Command对象的ExecuteReader方法,将数据读入DataReader对象中。 5) 调用DataReader的Read或者Get方法读取一批数据,以便显示。 6) 调用Connection对象的Close方法,关闭数据序链接。
[例9.3] 在VS.NET 2003环境下创建一个名为UseDataReader的C#项目。其中,从NorthWind数据库的Employees表中使用SqlDataReader读取LastName,FirstName和City三个字段,并添加一个Label标签来显示数据。
图9.1 SqlDataReader 使用举例页面设计图 图9.2 SqlDataReader 使用举例运行结果
注意:每次使用完DataReader都应调用Close( )方法关闭它。因为,当正在使用DataReader时,它将独占与之关联的Connection,而且除了关闭DataReader以外不能对Connection执行其他任何操作(包括创建另一个DataReader对象)。
9.4 ADO.NET数据集 基于连接的方式操作数据的方法,其缺点是只能逐行顺序且以只读方式访问数据,因此,在任意访问某行数据或修改数据的情况下,使用DataReader就有些不够方便。本节将介绍通过编写代码操作数据库的另一种方式,即在无连接状态(或离线状态)下进行数据操作。
9.4.1 DataSet对象模型 • DataSet是ADO.NET离线体系的核心 • DataSet中的数据完全采用XML格式 • DataSet的存在是ADO.NET与以前数据结构之间的最大区别,它作为一个实体而单独存在,可以认为是内存中的数据库,但是,就其本身而言,它对涉及到的数据源或者目标是透明的
DataSet ChildRelations DataColumnCollection Constraints ParentRelations DataRowCollection ExtendedProperties DataRelationCollection DataTableCollection ExtendedProperties ExtendedProperties DataTable DataView DataRow DataColumn PrimaryKey 图9.3 DataSet对象模型
9.4.2 DataAdapter对象 • DataAdapter对象是DataSet对象和数据库之间的桥梁,它可以用来传递各种SQL命令,并把命令的执行结果填入DataSet对象。同样,DataAdapter对象还可将DataSet对象更新过的数据写回数据库。
1、DataAdapter对象的常用属性、方法和事件 表9.8 DataAdapter对象的常用属性
1、DataAdapter对象的常用属性、方法和事件 表9.9 DataAdapter对象的常用方法
2、定义DataAdapter对象的语法格式 1) 不带任何参数。 语法格式: SqlDataAdapter 对象名 = new SqlDataAdapter( ) 2) 带一个参数,且该参数为已经定义好的Command对象。 语法格式: SqlDataAdapter 对象名 = new SqlDataAdapter(SqlCommand对象)
3) 带有两个参数,分别为SQL命令语句和Connection对象。语法格式: SqlDataAdapter 对象名= new SqlDataAdapter(SQL语句,SqlConnection对象) 4) 带有两个参数,分别为SQL命令语句和连接字符串。语法格式: SqlDataAdapter 对象名= new SqlDataAdapter(SQL语句,连接字符串) 这种格式不需要先建立Connection对象和Command对象。
以上是创建SqlDataAdapter对象的几种方法,读者可以选择使用。如果要创建OleDbDataAdapter对象,将所有的“Sql”改为“OleDb”即可。
9.4.3 DataSet对象 • DataSet可以理解为一个容器,可以把从数据库中取得的数据保存在应用程序中,像是应用程序的微型数据库。 • 从DataSet对象模型可知,DataSet对象结构非常复杂,在DataSet对象的下一层中是DataTableCollection对象、DataRelationCollection对象和ExtendedProperties对象。
1、DataTableCollection • 每一个DataSet对象是若干个DataTable 对象组成,DataTableCollection就是管理DataSet中的所有DataTable对象。 • 表示DataSet中两个DataTable对象之间的父/子关系是DataRelation对象。
2 DataRelationCollection • DataRelationCollection对象就是管理DataSet中所有DataTable之间的DataRelation关系的。它使一个DataTable中的行与另一个DataTable中的行相关联。
3 ExtendedProperties • DataSet对象定义。 语法格式: DataSet对象名= new DataSet ( ) 创建DataSet对象之后,必须用DataAdapter对象的Fill(DataSet对象,SrcTable)方法将数据表记录填入DataSet对象。给出的Fill( )方法中的SrcTable参数所指定的表名,不是数据库中的表名称,而是DataSet对象中的表名。
DataSet对象的属性和方法 表9.11 DataSet对象的常用属性
DataSet对象的属性和方法 表9.12 DataSet对象的常用方法
2) DataTableCollection(数据表集合)和DataTable对象集合。 • DataTableCollection的常用属性主要有: (1) Count:获取DataTableCollection中的DataTable(DataSet对象所包含的)个数 (2) Item({index, name}):获取DataTableCollection中下标为index或名称为name的数据表。
创建DataTable对象的语法格式有下列两种: 1)DataTable 对象名=new DataTable( ) 2)DataTable 对象名=new DataTable(“数 据表名”) 使用第一种方式创建DataTable对象,需要在对象创建后使用TableName属性设置表名。
DataTable对象的属性、方法及事件 表9.13 DataTable对象的常用属性
DataTable对象的属性、方法及事件 表9.14 DataTable对象的常用方法
DataTable对象的属性、方法及事件 表9.15 DataTable对象的事件