首页 第十章 ADO.NET技术

第十章 ADO.NET技术

举报
开通vip

第十章 ADO.NET技术第十章 ADO.NET技术 第十章 ADO.NET技术 10.1 ADO.NET概述 ADO.NET也是.NET框架的一部分,是一系列提供数据访问服务的类。也是最新的数据库访问技术。ADO.NET的SQL数据提供程序使用统一的SQL数据访问模型实现对各种使用SQL语句的数据库的数据访问支持。例如Oracle、SQL Server、DB2、Access等。 早期的数据库访问技术经历了以下几个阶段: ODBC:开放数据库连接(Open Database Connectivity)是第一个使用SQL语言访问不同关...

第十章 ADO.NET技术
第十章 ADO.NET技术 第十章 ADO.NET技术 10.1 ADO.NET概述 ADO.NET也是.NET框架的一部分,是一系列提供数据访问服务的类。也是最新的数据库访问技术。ADO.NET的SQL数据提供程序使用统一的SQL数据访问模型实现对各种使用SQL语句的数据库的数据访问支持。例如Oracle、SQL Server、DB2、Access等。 早期的数据库访问技术经历了以下几个阶段: ODBC:开放数据库连接(Open Database Connectivity)是第一个使用SQL语言访问不同关系数据库的数据访问技术。 DAO:数据访问对象(Data Access Objects)是用于Visual Basic的一种简单的数据访问技术,操作Access数据库。 RDO:远程数据对象(Remote Data Objects),对DAO的改进。 OLE DB:基于组件对象模型(COM),支持对非关系数据库的访问。 ADO:对OLE DB的改进 ADO.NET:基于.NET框架,和ADO的数据访问方式完全不同 ADO.NET是基于.NET的数据访问层。在数据库应用中,.NET使用ADO.NET把前端的用户界面和后台的数据库联系起来。当用户通过用户界面发送数据请求以后,用户界面把这个请求发给ADO.NET,ADO.NET分析用户请求后,通过数据库访问接口与数据源交互,向数据源发送SQL命令,并从数据源获得数据后,将数据返回给用户界面。 ADO.NET可以访问SQL Server、Oracle等数据库,OLE DB和XML数据源等。 ADO.NET中的数据访问类包含在.NET库的System.Data命名空间里。这个空间又根据功能的不同分成以下几个子空间: 命名空间 说明 System.Data.Common 包含ADO.NET的公共类 System.Data.OleDb 包含访问OLE DB数据源的类 System.Data.SqlClient 包含访问SQL Server数据库的类 System.Data.SqlTypes 包含在SQL Server内部用于本机数据类型的类 System.Data.Odbc 包含访问ODBC数据源的类 System.Data.OracleClient 包含访问Oracle数据库的类 10.2 ADO.NET与ASP.NET的关系 ASP.NET是用于WEB程序开发的技术,而ADO.NET用于在ASP.NET应用程序中快速的访问数据库。利用ASP.NET页面中的控件可以绑定数据源,而ADO.NET可以根据用户的需求动态的生成数据源的数据,提供给ASP.NET页面中的控件显示数据。例如GridView控件用于在页面中显示数据,我们可以设置它的数据源为某一个数据库,然后通过ADO.NET的数据访问类,根据ASP.NET页面提交的SQL请求访问数据库,然后把结果动态的传给 1 GridView控件,显示在页面上。 可以使用 ADO.NET 的两个组件来访问和处理数据:NET Framework 数据提供程序和DataSet。 . NET Framework 数据提供程序 .NET Framework 数据提供程序是专门为数据处理以及快速地只进、只读访问数据而设计的组件。Connection 对象提供与数据源的连接。Command 对象使您能够访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令。DataReader 从数据源中提供高性能的数据流。最后,DataAdapter 提供连接 DataSet 对象和数据源的桥梁。DataAdapter 使用 Command 对象在数据源中执行 SQL 命令,以便将数据加载到 DataSet 中,并使对 DataSet 中数据的更改与数据源保持一致。 DataSet ADO.NET DataSet 专门为独立于任何数据源的数据访问而设计。因此,它可以用于多种不同的数据源,用于 XML 数据,或用于管理应用程序本地的数据。DataSet 包含一个或多个 DataTable 对象的集合,这些对象由数据行和数据列以及有关 DataTable 对象中数据的主键、外键、约束和关系信息组成。 10.3 ADO.NET访问数据库 在理解了ADO.NET的概念以后,下面我们介绍使用ADO.NET访问数据库。ADO.NET访问数据库有以下一些特点: (1)不依赖持续的活动连接 在传统的C/S应用程序中,组件将建立与数据库的连接,并在应用程序运行过程中使连接保持打开状态。出于各种原因,该方法在许多应用程序中是不实用的: , 打开的数据库连接占用宝贵的系统资源。 , 需要打开的数据库连接的应用程序极难按比例扩展。大量用户使用它时其效果很难 被接受 , 维持打开的数据库连接是不可行的,因为没有办法知道客户端是否需要进一步的数 据访问 , 基于始终连接数据的模型可能使得使用连接结构在应用程序和组织边界之间交换 数据变得困难且不实际 相比较而言,使用 ADO.NET 进行数据访问是以有节制使用连接的结构为中心进行设计的。应用程序连接到数据库的时间仅足够获取或更新数据。因为数据库并未被大部分时间空闲的连接占用,所以它可以为更多用户提供服务。 (2)使用数据库命令执行数据库交互 ADO.NET使用SQL语句或存储过程执行数据库操作。首先打开一个连接,执行命令引用的SQL语句或存储过程,然后关闭连接。连接保持打开的时间仅足够执行语句或存储过程。 (3)数据可被缓存到数据集中 最常见数据任务是从数据库检索数据并对数据进行某些操作:显示数据、处理数据或将数据发送给另一个组件。经常地,应用程序需要处理不止一条记录,而是一组记录。在许多情况下,每次应用程序需要处理下一条记录时都返回到数据库是不切实际的。解决 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 就是临时存储从数据库检索的记录,然后使用该临时集。这便是数据集的概念。数据集是从数据源检索的记录的缓存。 (4)数据集独立于数据源 2 尽管数据集是作为从数据库获取的数据的缓存,但数据集与数据库之间没有任何实际关系。数据集是容器;它由从数据适配器执行的 SQL 命令或存储过程填充。由于数据集不直接绑定到数据源,所以它是来自多个源的数据的好的集成点。例如,数据集内的某些数据可能来自数据库,而它的其他部分可能来自另一个数据库或电子表格之类的非数据库源。数据集内的某些数据可能来自另一个组件所发送的流。一旦数据在数据集内,则不管它的原始源是什么,都可以使用一致的对象模型对它进行操作。 (5)数据保持为 XML 数据需要从数据存储区移动到数据集以及从数据集移动到各种组件。在 ADO.NET 中,传输数据的格式是 XML。类似地,如果需要保持数据(例如保持到文件中),则将其存储为 XML。如果有 XML 文件,则可以像使用任何数据源一样使用它,并从它创建数据集。 10.4 ADO.NET对象模型 ADO.NET的结构如下图: Connection SelectCommand DataTableCollection Command DataRowCollection InsertCommand DataColumnCollection DataReader UpdateCommand ConstraintCollection DeleteCommand DataRelationCollection XML 数据库 ADO.NET对象模型主要有以下几个对象:SqlConnection对象、SqlCommand对象、SqlDataReader对象、SqlDataAdapter、DataSet对象和DataTable对象。通过这些对象可以对数据库进行操作,下面将一一介绍它们。 3 10.4.1 SqlConnection对象 要访问数据库,第一步就是要建立数据库连接。SqlConnection对象就是用来进行数据库连接的。这里以SQL Server 2005数据库为例。 SqlConnection类包含在System.Data.SqlClient命名空间里。它的常用属性和方法如下: 属性 说明 ConnectionString 用于打开SQL Server数据库的连接字符串 Database 数据库名 DataSource 要连接的SQL Server的实例名 ConnectionTimeOut 获取在尝试建立连接时终止尝试并生成错误之前所等待的时间。 ServerVersion 获取包含客户端要连接的 SQL Server 实例的版本的字符串。 State 当前连接的状态 WorkstationId 标识 采样口标识规范化 下载危险废物标识 下载医疗器械外包装标识图下载科目一标识图大全免费下载产品包装标识下载 数据库客户端的字符串 方法 说明 Open 使用 ConnectionString 所指定的属性设置打开数据库连接。 ChangeDatabase 为打开的 SqlConnection 更改当前数据库。 Close 关闭数据库连接 CreateCommand 创建并返回一个和SqlConnection相关的SqlCommand对象 BeginTransaction 开始数据库事务 有两种方法可以创建一个SqlConnection对象,因为SqlConnection类的构造 关于工期滞后的函关于工程严重滞后的函关于工程进度滞后的回复函关于征求同志党风廉政意见的函关于征求廉洁自律情况的复函 数有如下两种: SqlConnection() 当使用这个构造函数创建 SqlConnection 的新实例时,读/写属性将会被设置为以下初始值。要改变它们的值,除非在 ConnectionString 属性中使用它们的关联关键字专门设置这些属性。只能使用 ConnectionString 属性更改这些属性的值。 属性 初始值 ConnectionString 空字符串("") ConnectionTimeout 15 Database 空字符串("") DataSource 空字符串("") SqlConnection(string connectionString) 这个构造函数通过参数初始化了ConnectionString 属性。其它属性的默认值同上。 下面分步骤介绍怎样使用SqlConnection对象连接数据库: 1. 设置连接字符串ConnectionString SqlConnection对象的ConnectionString属性定义了连接字符串,它是打开数据 4 库必需的参数。它包含了数据源的路径和其他建立连接的参数。这里举一个连接字 符串的例子: "DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integr ated Security=True; User Instance=True" 这个连接字符串包含了一系列的关键字和它所对应的值。这些关键字说明如 下: , DataSource:要连接的SQL Server的实例名或网络地址。 , AttachDbFilename:数据库文件名,包含完整的路径。 , Integrated Security:如果为true,将使用默认的windows帐户进行身份验证; 如果为false,则需要在连接中指定SQL Server账户的用户名和密码。 , User Instance:用户实例 一般情况下,这个连接字符串可以通过Visual Studio 2005自动生成。 2. 创建SQL Server数据库连接 在构造好连接字符串以后,就可以调用Open方法来打开数据库了: //新建一个名为conn 的SqlConnection对象 SqlConnection conn = new SqlConnection(); //设置conn的ConnectionString属性 conn.ConnectionString="DataSource=.\SQLEXPRESS;AttachDbFilename=|DataD irectory|\Database.mdf;Integrated Security=True;User Instance=True"; //调用conn的Open方法打开数据库 conn.Open(); 上面打开数据库的方法分为三步。首先创建SqlConnection对象,然后设置它 的ConnectionString属性,最后调用Open方法打开。很简单。 我们也可以用另外一种方式打开数据库连接: //把连接字符串存放在字符串变量里面 string connString="DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Da tabase.mdf;Integrated Security=True;User Instance=True"; //新建一个SqlConnection对象,把连接字符串作为参数给构造函数 SqlConnection conn = new SqlConnection(connString); //调用conn的Open方法打开连接 conn.Open(); 这两种方法都是等价的。 3. 断开连接 数据库使用完毕的时候应当及时断开连接,使用Close方法就可以断开连接。 5 conn.Open(); 断开连接就一句话,很简单。 下面我们举一个完整的连接SQL Server数据库的例子: using System.Data.SqlClient; public static void DatabaseConnection() { SqlConnection conn = new SqlConnection(); conn.ConnectionString= "DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;I ntegrated Security=True;User Instance=True"; conn.Open(); Console.WriteLine("{0}",conn.State.ToString()); conn.Close(); Console.WriteLine("{0}",conn.State.ToString()); } 运行以后可以看到State属性显示的连接状态。 4. 连接其它数据源 除了SQL Server数据库以外,还能够使用System.Data命名空间里的其它对象 创建与其它数据源的连接,主要有下面三个对象: , OleDbConnection:与通过OLE DB访问的数据源的连接 , OdbcConnection:与ODBC数据源名称创建的数据库的连接 , OracleConnection:与Oracle数据库的连接 这三个对象的用法和SqlConnection对象类似,这里仅举一个连接Oracle数据 库的例子: using System.Data.OracleConnection; public void CreateOracleConnection(string connString) { OracleConnection conn = new OracleConnection(connString); myConnection.Open(); Console.WriteLine("{0}",conn.State.ToString()); myConnection.Close(); Console.WriteLine("{0}",conn.State.ToString()); } 调用这个函数可以连接Oracle数据库,它的参数是连接字符串。 10.4.2 SqlCommand对象 在创建了数据库连接以后,接下来就可以对数据库进行操作了。这主要是通过 SqlCommand对象来完成的。SqlCommand对象存储SQL语句或者存储过程,通过 DataAdapter提交给数据库执行。 6 SqlCommand对象常用的属性和方法如下: 属性 说明 CommandText 获取或设置要对数据源执行的SQL语句或存储过程。 CommandTimeout 获取或设置在终止执行命令的尝试并生成错误之前的等待时间。 CommandType 获取或设置一个值,该值指示CommandText属性的类型。 Connection 获取或设置SqlCommand的此实例使用的SqlConnection。 DesignTimeVisible 获取或设置一个值,该值指示命令对象是否应在Windows窗体设计器 控件中可见。 Parameters 获取SqlParameterCollection参数集合 Transaction 获取或设置将在其中执行 SqlCommand 的 SqlTransaction。 方法 说明 ExecuteNonQuery 对连接执行SQL语句并返回受影响的行数。 ExecuteReader 将CommandText发送到Connection并生成一个SqlDataReader。 ExecuteXmlReader 将CommandText发送到Connection并生成一个XmlReader对象。 ExecuteScalar 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略额外的 列或行。 SqlCommand类有四种构造函数,因此有四种方法创建一个SqlCommand对象: SqlCommand() 这个构造函数不带参数,它将所有字段初始化为它们的默认值: 属性 初始值 CommandText 空字符串("") CommandTimeout 30 CommandType CommandType.Text Connection 空 SqlCommand(string) 这个构造函数带一个参数,这个参数初始化了CommandText属性,即查询的文本。其 它属性为默认值。 SqlCommand(string, SqlConnection) 这个构造函数带两个参数,这两个参数初始化了CommandText属性和Connection属性。 其它属性为默认值。 SqlCommand(string, SqlConnection, SqlTransaction) 这个构造函数带三个参数,这三个参数初始化了CommandText属性、Connection属性 和Transaction属性。其它属性为默认值。 有以下一些使用SqlCommand对象执行SQL语句或存储过程的方法: 7 使用ExecuteNonQuery方法 例一:使用SqlCommand对象向数据库表中插入一条记录 //数据库连接字符串 string connString= "DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True"; //要执行的SQL语句 string sqlString="insert into userinfo(name,age,gender,nickname) values('albert',23,'male','albe')"; SqlConnection conn = new SqlConnection(); Conn.ConnectionString = connString; //打开数据库连接 conn.Open(); //以下为使用SqlCommand对象 SqlCommand comm = new SqlCommand(); comm.Connection = conn; //设置SqlCommand 对象的CommandText属性,它代表要执行的SQL语句 comm.CommandText = sqlString; // ExectNonQuery()方法执行SQL语句并返回受影响的行数,赋给变量result int result = comm.ExectNonQuery(); //输出受影响的行数 Console.WriteLine("{0}条记录被修改",result); //用完数据库连接记得要及时用Close方法关掉 conn.Close(); 可见,这里使用SqlCommand对象执行SQL语句的过程也分为如下三步:首先新建一个SqlCommand对象,并指定它的Connection对象;然后指定它的CommandText属性,确定要执行的SQL语句。最后调用ExectNonQuery()语句来执行,并返回受影响的记录数,也可以不返回。 例二:使用SqlCommand对象执行一个存储过程 //建立并打开数据库连接 SqlConnection conn = new SqlConnection(); conn.ConnectionString=System.Configuration.ConfigurationManager.ConnectionString s["connString"].ConnectionString; conn.Open(); //新建一个名为comm的SqlCommand对象,使用存储过程名和SqlConnection对象 8 名作为参数 SqlCommand comm = new SqlCommand("AddUser",conn); //指定CommandType属性,含义是要执行的命令类型是存储过程 comm.CommandType = CommandType.StoredProcedure; //向Parameters属性里面加入了四个参数,第一个参数名是UserName,它的值是变量name,这些值会传递给存储过程的参数 SqlParameter UserName = comm.Parameters.Add("@name", SqlDbType.NVarChar,30); UserName.Value = name; SqlParameter PassWord = comm.Parameters.Add("@pwd", SqlDbType.VarChar, 20); PassWord.Value = password; SqlParameter Email = comm.Parameters.Add("@email", SqlDbType.NVarChar, 50); Email.Value = email; SqlParameter NickName = comm.Parameters.Add("@nickname", SqlDbType.NVarChar, 30); NickName.Value = nickname; //调用ExecuteNonQuery方法执行存储过程 comm.ExecuteNonQuery(); //关闭数据库连接 conn.Close(); 可见,这里使用SqlCommand对象执行存储过程的过程也分为如下三步:首先新建一个名为comm的SqlCommand对象,然后向SqlCommand对象的Parameters属性里面加入参数,最后调用ExecuteNonQuery方法执行存储过程。当然了,再一次提醒别忘了关闭数据库连接。需要说明的是,存储过程的这些参数通常由用户通过ASP.NET页面上的控件提供。 使用上面的方法可以执行SQL语句和存储过程,它们适用于不需要返回结果数据的场合,例如插入、更新、删除、新建等操作,或者不需要返回结果的查询。但是如果需要返回结果的时候,就不能再使用上面的方法了。 我们接下来要介绍的对象可以得到返回数据结果。 10.4.3 SqlDataReader对象 SqlDataReader对象用于获取只读的结果集。若要创建 SqlDataReader对象,必须调用 SqlCommand 对象的 ExecuteReader 方法,而不直接使用构造函数。 SqlDataReader对象的常用属性和方法如下: 属性 说明 Depth 获取一个值,该值指示当前行的嵌套深度。 9 FieldCount 获取当前行中的列数。 HasRows 获取一个值,该值指示SqlDataReader是否包含一行或多行。 IsClosed 获取一个值,该值指示数据读取器是否已关闭。 Item 获取以本机格式表示的列的值。 RecordsAffected 获取执行SQL语句所更改、插入或删除的行数。 方法 说明 Close 关闭SqlDataReader对象 GetFieldType 获取对象的数据类型 GetName 获取制定列名 GetOdinal 在给定列名的情况下获取列序号 GetString 获取指定列的字符串形式的值 Read 使SqlDataReader前进到下一条记录 使用ExecuteReader方法 下面的例子使用SqlDataReader对象获得结果集。并判断结果集里面是否有数据。 public static bool UserExist(string NewUser) { //定义两个字符串变量,分别保存sql语句和数据库连接字符串 string sqlString = "select * from UserInfo where username="+NewUser; string connString="DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Da tabase.mdf;Integrated Security=True;User Instance=True"; //新建一个数据库连接 SqlConnection conn = new SqlConnection(connString); conn.Open(); //新建一个SqlCommand对象,它的构造函数的参数是sql语句和SqlConnection 对象 SqlCommand comm = new SqlCommand(sqlString,conn); //利用SqlCommand对象的ExecuteReader方法新建一个SqlDataReader对象, //获得结果集,并存储在SqlDataReader对象中 SqlDataReader dr = comm.ExecuteReader(); //如果结果集不为空,则返回true,否则返回false if (dr.Read()) { conn.Close(); dr.Close(); return true; } 10 else { conn.Close(); dr.Close(); return false; } } 这个函数接收一个字符串作为参数,用来判断以这个字符串为名的用户是否存在。它用到了SqlDataReader对象的read方法判断查询的结果集是否为空。 10.4.4 SqlDataAdapter对象 SqlDataAdapter对象表示一组数据命令和一个数据库连接,可以向数据库提交SqlCommand对象所代表的SQL查询命令,并获得返回的结果集。 SqlDataAdapter对象的主要属性和方法如下: 属性 说明 DeleteCommand 获取或设置一个SQL语句或存储过程,以从数据集删除记录。 InsertCommand 获取或设置一个SQL语句或存储过程,以在数据源中插入新记录。 SelectCommand 获取或设置一个SQL语句或存储过程,用于在数据源中选择记录。 UpdateCommand 获取或设置一个SQL语句或存储过程,用于更新数据源中的记录。 方法 说明 Fill 在DataSet中添加或刷新行以匹配数据源中的行。 Update 为DataSet中每个已插入、已更新或已删除的行调用相应的INSERT、UPDATE或 DELETE语句。 GetType 获取当前实例的Type。 SqlDataAdapter类有四种构造函数: SqlDataAdapter() 不带参数,它的属性需要另外设置。 SqlDataAdapter(SqlCommand selectCommand) 它有如下一个参数: selectCommand 一个 SqlCommand(可以是SQL SELECT 语句或存储过程),已设置为 SqlDataAdapter 的 SelectCommand 属性。 SqlDataAdapter 构造函数的实现将 SelectCommand 属性设 置为在 selectCommand 参数中指定的值。 SqlDataAdapter(string selectCommandText, SqlConnection selectConnection) 它有如下两个参数: 11 selectCommandText 一个 String,它是将要由 SqlDataAdapter 的 SelectCommand 属性使用的SQL SELECT 语句或存储过程。 selectConnection 表示该连接的 SqlConnection。 SqlDataAdapter(string, string) 它有如下两个参数: selectCommandText 一个 String,它是将要由 SqlDataAdapter 的 SelectCommand 属性使用的SQL SELECT 语句或存储过程。 selectConnectionString 连接字符串。 SqlDataAdapter 是 DataSet 和 SQL Server 之间的桥接器,用于检索和保存数据。SqlDataAdapter执行SQL查询以后,将返回的结果填充到DataSet中。当 SqlDataAdapter 填充 DataSet 时,它将为返回的数据创建必要的表和列。下面举例说明怎样使用 SqlDataAdapter对象: 下面这个函数用SqlDataAdapter填充一个DataSet对象。 public DataSet FillDataSet(DataSet dataset, string connection, string query) { //新建一个SqlConnection对象 SqlConnection conn = new SqlConnection (connection); //新建一个SqlDataAdapter对象 SqlDataAdapter adapter = new SqlDataAdapter (); //把新建的SqlCommand对象赋给SqlDataAdapter对象的SelectCommand属性 adapter.SelectCommand = new SqlCommand (query, conn); //调用Fill方法填充DataSet adapter. Fill (dataset); //返回已填充的DataSet return dataset; } 既然SqlDataAdapter的作用是用来填充DataSet,那么什么是DataSet呢, 10.4.5 DataSet对象 ADO.NET使用DataSet对象把查询的结果数据缓存在内存中。DataSet 是 ADO.NET 结构的主要组件,它是从数据源中检索到的数据在内存中的缓存。DataSet 由一组 DataTable 对象组成,构成虚拟数据表,包括行、列、约束、关系等。相应的对象为: DataTable对象 相当于内存中的数据表 12 DataColumn对象 内存中的数据表的列 DataRow对象 内存中的数据表的行 Constraint对象 内存中的数据表的约束 DataRelation对象 内存中的数据表的关系 简单的说,DataSet对象就是内存中的数据表,只不过它是由查询结果填充的虚拟表。查询结果可能来自一个数据库中的表,也可能来自多个表。 我们可以象在数据库中创建表那样创建DataSet对象: DataColumn对象 DataColumn用来生成DataSet中的数据列,相当于表中的字段。它的主要属性如下: 属性 说明 ColumnName 获取或设置DataColumnCollection中的列的名称。 Caption 获取或设置列的标题 AllowDBNull 获取或设置一个值,指示对于属于该表的行,此列中是否允许空值。 DataType 获取或设置存储在列中的数据的类型。 DefaultValue 在创建新行时获取或设置列的默认值。 AutoIncrement 获取或设置一个值,指示对于添加到该表中的新行,列是否将列的值自 动递增。 AutoIncrementSeed 获取或设置其AutoIncrement属性设置为true AutoIncrementStep 获取或设置其AutoIncrement属性设置为true Expression 获取或设置表达式,用于筛选行、计算列中的值或创建聚合列。 MaxLength 获取或设置文本列的最大长度。 Unique 获取或设置一个值,指示列的每一行中的值是否必须是唯一的。 DataColumn类的构造函数如下: DataColumn () 不带参数,没有默认的 ColumnName 或 Caption 属性 DataColumn (string columnName) 参数为一个字符串,它表示要创建的列的名称。 DataColumn (string columnName, Type dataType) 两个参数,分别表示要创建的列的名称和支持的 DataType DataColumn (string columnName, Type dataType, string expr) 三个参数,分别表示要创建的列的名称、支持的 DataType和用于设置Expression属性 DataColumn (string columnName, Type dataType, string expr, MappingType type) 13 四个参数,分别表示要创建的列的名称、支持的 DataType、用于设置Expression属性 和MappingType属性 下面的例子新建了一个DataColumn对象。 //新建一个DataColumn对象 DataColumn myColumn = new DataColumn (); // 设置DataColumn对象的属性 myColumn.ColumnName = "id"; myColumn.DataType = System.Type.GetType ("System.Int32"); myColumn.AutoIncrement = true; myColumn.AutoIncrementSeed = 1; myColumn.AutoIncrementStep = 1; myColumn.ReadOnly = true; 这段代码相当于为一个表创建了一个新的字段,字段名是id,数据类型是Int32,是自动增长字段,从1开始,每条记录加1。而且还是只读字段,记录一旦添加该字段就不能更改。 10.4.6 DataTable对象 创建了一个数据列DataColumn后,就可以把它放在内存表中DataTable,添加多个数据列DataColumn后,就构成了一个内存表DataTable。 DataTable的常用属性和方法如下: 属性 说明 Columns 获取属于该表的列的集合。 Rows 获取属于该表的行的集合。 DataSet 获取该表所属的DataSet。 TableName 获取或设置DataTable的名称。 PrimaryKey 获取或设置充当DataTable主键的列的数组。 方法 说明 AcceptChanges 提交自上次调用AcceptChanges以来对该表进行的所有更改。 Clear 清除所有数据的DataTable。 GetChanges 获取DataTable的副本,该副本包含自上次加载以来或自调用 AcceptChanges 以来对该数据集进行的所有更改。 NewRow 新建一个DataRow DataTable有三个构造函数: DataTable () 不带参数 14 DataTable (string) 带一个字符串参数,用来指定表名 DataTable (SerializationInfo, StreamingContext) 两个参数,分别指定将对象序列化或反序列化所需的数据和给定序列化流的源和目的地 下面举例说明怎样创建DataTable和怎样将DataColumn加入到DataTable: // 新建一个DataTable DataTable myDataTable = new DataTable (); // 新建一个DataColumn DataColumn myDataColumn = new DataColumn (); //设置DataType和ColumnName属性 myDataColumn.DataType = System.Type.GetType ("System.Int32"); myDataColumn.ColumnName = "id"; //将DataColumn加入到DataTable中 myDataTable.Columns.Add (myDataColumn); // 新建第二个DataColumn,并加入到DataTable中 DataColumn myDataColumn = new DataColumn (); myDataColumn.DataType = Type.GetType ("System. String"); myDataColumn.ColumnName = "name"; myDataTable.Columns.Add (myDataColumn); 这段代码首先新建了一个DataTable,然后创建了两个DataColumn,分别设置了它们的DataType和ColumnName属性,也就是列类型和列名。最后调用Columns属性地Add方法把这两个列加入到DataTable中,形成了一个拥有两列的表。 在DataTable中加入DataColumn以后,还需要添加记录才能生成有 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 的表。下面我们介绍怎样象DataTable中加入行。 DataRow对象 DataRow用来生成DataSet中的数据行,相当于表中的记录。DataRow 和 DataColumn 对象是 DataTable 的主要组件。使用 DataRow 对象及其属性和方法检索、评估、插入、删除和更新 DataTable 中的值。它的主要属性如下: 属性 说明 Item 获取或设置存储在指定列中的数据 ItemArray 通过数组获取或设置此行的所有值。 Table 获取该行所属的DataTable 方法 说明 Delete 删除DataRow。 IsNull 获取一个值,该值指示指定列是否包含空值。 15 DataTable的NewRow方法用于新建一个DataRow: DataRow myDataRow = myDataTable.NewRow(); 新建一个DataRow以后,就要设置每个列的值: myDataRow[“id”] = 1; myDataRow[“name”] = “albert”; 设置完每列的值以后,就可以把这个DataRow加入到DataTable中了: myDataTable.Rows.Add(myDataRow); 这里是调用DataTable对象Rows属性的Add方法。 下面综合前面介绍的DataTable、DataColumn和DataRow,举一个完整的创建DataTable 的例子: DataTable myDataTable = new DataTable (); DataColumn myDataColumn = new DataColumn (); myDataColumn.DataType = System.Type.GetType ("System.Int32"); myDataColumn.ColumnName = "id"; myDataTable.Columns.Add (myDataColumn); DataColumn myDataColumn = new DataColumn (); myDataColumn.DataType = Type.GetType ("System.String"); myDataColumn.ColumnName = "name"; myDataTable.Columns.Add (myDataColumn); DataRow myDataRow = myDataTable. NewRow (); myDataRow ["id"] = 1; myDataRow ["name"] = "albert"; myDataTable.Rows.Add (myDataRow); DataRow myDataRow = myDataTable. NewRow (); myDataRow ["id"] = 2; myDataRow ["name"] = "bruce"; myDataTable.Rows.Add (myDataRow); 这段代码创建了一个完整的DataTable,它有两行两列。 16 10.5使用ADO.NET操作数据库 前面介绍了ADO.NET中各个对象的用法。这里将要介绍怎样利用这些对象操作数据库。SqlCommand对象有四个主要的方法:ExecuteReader、ExecuteNonQuery、ExecuteScalar和ExecuteXmlReader。它们都是用来操作数据库的,但是各自的功能不同。接下来我们一一介绍怎样使用这些方法。 10.5.1使用ExecuteReader()操作数据库 ExecuteReader是SqlCommand对象的方法,在前面已经介绍过,它有两个重载方法分别如下: SqlDataReader ExecuteReader () 将SQL语句或存储过程发送给数据库连接,并返回一个只读的结果集。 SqlDataReader ExecuteReader (CommandBehavior behavior) 带一个参数CommandBehavior,提供对查询结果和查询对数据库的影响的说明。 参数CommandBehavior的说明如下: 成员名称 说明 值 CloseConnection 在执行该命令时,如果关闭关联的DataReader对象,则关联的32 Connection对象也将关闭 Default 此查询可能返回多个结果集。执行查询可能会影响数据库状态。调0 用ExecuteReader(CommandBehavior.Default)在功能上等效于调用 ExecuteReader()。 KeyInfo 此查询返回列和主键信息。执行此查询时不锁定选定的行 4 SchemaOnly 此查询只返回列信息,而不影响数据库状态。 2 SequentialAccess 提供一种方法,以便DataReader处理包含带有大二进制值的列的行 16 SingleResult 查询返回一个结果集。 1 SingleRow 查询应返回一行 8 下面举例说明ExecuteReader的用法: 例一:使用ExecuteReader执行查询,不带参数,返回查询结果,并输出查询结果第一列的值。 //建立数据库连接的步骤省略,读者可参考10.4节 SqlCommand comm = new SqlCommand (sqlString, conn); conn.Open (); //调用ExecuteReader方法,将返回的结果赋给SqlDataReader 对象dr SqlDataReader dr = myCommand.ExecuteReader (); //依次读下一条记录,调用SqlDataReader对象的GetString方法输出记录的第一列的值 17 while (myReader.Read ()) { Console.WriteLine (myReader.GetString (0)); } //关闭SqlDataReader和数据库连接 myReader.Close (); myConnection.Close (); 例二:同例一,但是这里带有一个参数 //建立数据库连接的步骤省略,读者可参考10.4节 SqlCommand comm = new SqlCommand (sqlString, conn); conn.Open (); //调用ExecuteReader方法,带有一个参数,含意是在关闭SqlDataReader的同时自动关 闭数据库连接 SqlDataReader dr = myCommand.ExecuteReader (CommandBehavior. CloseConnection); //依次读下一条记录,调用SqlDataReader对象的GetString方法输出记录的第一列的值 while (myReader.Read ()) { Console.WriteLine (myReader.GetString (0)); } //关闭SqlDataReader,同时自动关闭数据库连接 myReader.Close (); //隐式关闭了数据库连接,因为有CommandBehavior.CloseConnection参数 10.5.2使用ExecuteNonQuery()操作数据库 ExecuteNonQuery也是SqlCommand对象的方法。它比较简单,作用是对连接执行 SQL 语句并返回受影响的行数。一般用它执行不需要返回结果的SQL语句或存储过程,例如插入、删除、更新、删除等操作。例如: SqlCommand comm = new SqlCommand (sqlString, conn); conn. Open (); comm.ExectNonQuery (); conn.Close (); 这里的sqlString代表要执行的SQL语句,conn代表SqlConnection对象。调用了SqlCommand 对象的ExecuteNonQuery方法执行了SQL语句,不返回结果。 我们也可以使用它的返回值,以得知执行了SQL语句以后,有几条记录受影响。只需要把上面的代码改为: SqlCommand comm = new SqlCommand (sqlString, conn); conn. Open (); int result = comm.ExectNonQuery (); 18 Console.WriteLine("{0}条记录被修改",result); conn.Close (); 这里的整型变量result用来保存ExecuteNonQuery方法的返回值。 10.5.3使用ExecuteScalar()操作数据库 ExecuteScalar也是SqlCommand对象的方法。它用来执行查询,并返回查询所返回的结果集中第一行的第一列。忽略额外的列或行。 使用 ExecuteScalar 方法从数据库中检索单个值(例如一个聚合值)。与使用 ExecuteReader 方法,然后使用 SqlDataReader 返回的数据执行生成单个值所需的操作相比,此操作需要的代码较少。 典型的 ExecuteScalar 查询可以采用类似于下面的 C# 示例的格式: cmd.CommandText = "select count (*) from region"; Int32 count = (int32) cmd.ExecuteScalar (); 下面的例子创建了一个 SqlCommand,然后使用 ExecuteScalar方法执行它。myScalar是返回聚合结果的SQL 语句,conn是用于连接到数据库的SqlConnection对象 SqlCommand comm = new SqlCommand (myScalarQuery, conn); conn.Open (); comm. ExecuteScalar (); conn.Close (); 10.5.4使用ExecuteXmlReader()操作数据库 ExecuteXmlReader用于将 CommandText 发送到 Connection 并生成一个 XmlReader 对象。有关XmlReader对象,读者可以参考MSDN。 CommandText 属性通常指定一个带有有效的 FOR XML 子句的SQL 语句。有关FOR XML子句,后面会有简单介绍。 典型的 ExecuteXmlReader 查询可以采用类似于下面的 C# 示例的格式: SqlCommand comm = new SqlCommand ("select * from customers FOR XML AUTO, XMLDATA", conn); 其中FOR XML AUTO, XMLDATA就是FOR XML子句。 当正在使用 XmlReader 时,则关联的 SqlConnection 正忙于服务 XmlReader。当处于此状态时,除了关闭 SqlConnection 外,不能对其执行其他任何操作。除非调用 XmlReader 的 Close 方法,否则会一直处于此状态。 19 下面的例子调用了ExecuteXmlReader方法执行一个SQL查询,返回一个XmlReader对 象。带有两个参数,一个是SQL查询语句,一个是SqlConnection对象。 SqlCommand comm = new SqlCommand (myXmlQuery, conn); conn.Open (); System.Xml.XmlReader myXmlReader = myCommand.ExecuteXmlReader (); myXmlReader.Close (); conn.Close (); 下面简单介绍一下FOR XML子句。 FOR XML子句有以下几种模式: For XML Raw For XML Raw模式返回一个结果集,元素名是row,每个列的值是属性对: 下面的例子使用了For XML Raw模式进行查询: SELECT Top 3 id, name, age from studentinfo FOR XML RAW 返回结果是: For XML Auto For XML Auto模式用表或视图名作元素名,而列名用作每个元素的属性 SELECT Top 3 id, name, age from studentinfo FOR XML AUTO 返回结果是: < studentinfo id=1 name="albert" age=20/> < studentinfo id=2 name="bruce" age=21/> < studentinfo id=3 name="cate" age=22/> For XML Explicit For XML Explicit模式可以产生更灵活的结果,也可以用于满足复杂的需求。 Type Mode 当使用FOR XML子句的Type模式返回XML数据类型时,它们被作为XML数据类型 返回。以下是一个对FOR XML子句使用XML Type指令的示例: SELECT Top 3 id, name, age from studentinfo FOR XML AUTO, TYPE 20 10.6 数据访问服务器控件 知道了怎样用ADO.NET的对象操作数据库以后,我们接下来介绍如何使用和数据访问相关的服务器控件。 10.6.1 Repeater控件 Repeater Web 服务器控件是一个基本容器控件,它使您得以从页的任何可用数据中创建出自定义列表。 可以用如下代码在叶面中添加一个Repeater Web 服务器控件。 该控件不具有固有外观,例如,它在默认情况下不创建数据的垂直列表或表。而是由开发人员通过创建 模板 个人简介word模板免费下载关于员工迟到处罚通告模板康奈尔office模板下载康奈尔 笔记本 模板 下载软件方案模板免费下载 为该控件提供布局。当该页运行时,Repeater 控件依次通过数据源中的记录,并为每个记录呈现一个“项”(或交替项)。 要使用 Repeater 控件,应该创建定义控件内容布局的模板。模板可以包含在 Web 窗体页上有效的 HTML 文本和控件的任意组合。如果未定义模板,或者如果模板都不包含元素,则当应用程序运行时,该控件不显示在页上。 Repeater 控件有如下模板: 模板 说明 ItemTemplate 为数据源中的每一行呈现一次的元素。若要在ItemTemplate中显 示数据,请向该模板添加一个或多个Web服务器或HTML服务器 控件,并将这些控件绑定到数据源。 AlternatingItemTemplate 与ItemTemplate元素类似,但对于Repeater控件中的行每隔一行 呈现一次。可以通过设置AlternatingItemTemplate元素的样式属性 来为它指定不同的外观。 Header Template和 在呈现所有数据绑定行之前和之后呈现一次的元素。例如,可以FooterTemplate 通过将开始标记 放在 HeaderTemplate 中并将结束标 记
放在 FooterTemplate 中而使 HTML 表跨整个重 复器。 Separator Template 在每行之间呈现的元素,例如分行符(
标记)、行(
标 记)或逗号。 下面我们介绍一下什么是模板: 模板是一组 HTML 元素和控件,它们构成组件特定部分的布局。模板包含 HTML,甚至是嵌入的服务器控件。当控件在 Web 窗体页中运行时,控件框架呈现模板的内容,而不是控件的默认 HTML。模板采用XML文件的格式 下面看一个模板的例子,它包含在Repeater 控件的标记中。同时这也是一个使用Repeater控件的完整的例子。 在Visual Studio 2005里面新建一个ASP.NET页面名为Default.aspx,在它自动生成的代码中,加入如下代码: 21
   
在代码隐藏文件Default.aspx.cs的Page_Load方法中加入以下代码: protected void Page_Load(object sender, EventArgs e) { Repeater1.DataBind(); } 运行结果如下: 22 在这个例子中,我们加入了一个Repeater控件,同时在开始和结束标记之间,定义了模板。Repeater控件的DataSource属性定义了控件的数据源。我们也可以用控件的DataSourceID属性定义数据源,但是区别在于:后者可以自动绑定到数据源,而前者需要我们使用代码来手动绑定。绑定的方法就是调用控件的DataBind方法。绑定语句通常放在页面的Page_Load方法中。 这里我们使用了一个SqlDataSource控件用作数据源,指定Repeater控件数据源的方法如下: DataSource="<%# SqlDataSource1%> DataSource控件的属性说明如下: ConnectionString:数据库连接字符串,指明数据源来自哪个数据库 ProviderName:指定数据提供者名称 SelectCommand:指定SQL语句 这个例子使用Label 控件显示数据库的值。使用分隔符模板创建列表中记录之间的分隔符。请注意,Label 控件的 Text 属性的值包含在单引号中。属性值通常放在双引号中,但是由于 DataBinder 调用包含双引号,所以 Text 属性值必须括在单引号中。 Repeater 控件使用DataBinder类在运行时把数据绑定到控件,它通过分析数据绑定表达式来完成这种功能。数据绑定表达式如下: Container.DataItem,”id”,”{0:c}” 说明如下: Container.DataItem:数据项的命名容器 Id:字段名 {0:c}:格式字符串 利用DataBinder类的Eval方法可以分析数据绑定表达式,得到数据值。把值绑定到控 23 件的某个属性上的方法是: <控件名 ID 属性名=”<%# DataBinder. Eval(数据绑定表达式) %>” runat = “server”> 例如: 通过上面的例子我们可以看到使用Repeater 控件有以下几个步骤: 1(向页面中加入一个Repeater 控件 2(设置它的DataSource属性 3(调用控件的DataBind方法将控件绑定到数据源 4(在 Repeater 元素内创建包含 HTML 文本和控件的模板,以显示数据。 5(设计模板 10.6.2 DataList控件 DataList控件用于显示数据,并可以修改和选择数据。DataList的外观也可以由模板来自定义。 DataList控件支持以下模板: 模板 说明 ItemTemplate 为数据源中的每行呈现一次的HTML元素和控件。 AlternatingItemTemplate 与ItemTemplate元素类似,但对DataList控件中的行每隔一行呈 现一次。如果使用此模板,通常为其创建不同的外观,如与 ItemTemplate不同的背景色。 SelectedItemTemplate 当用户选择DataList控件中的项时呈现的元素。典型的用法是使 用背景色或字体颜色可视地标记该行。还可以通过显示数据源中 的其他字段来展开该项。 EditItemTemplate 当项处于编辑模式中时的布局。此模板通常包含编辑控件,如 TextBox HeaderTemplate和在列表的开始和结束处呈现的文本和控件。 FooterTemplate SeparatorTemplate 在每项之间呈现的元素。典型的示例是行(使用
元素)。 另外,DataList还支持以下事件,以响应单击按钮的操作: EditCommand:响应CommandName属性为edit的按钮单击事件 DeleteCommand:响应CommandName属性为delete的按钮单击事件 UpdateCommand:响应CommandName属性为update的按钮单击事件 CancelCommand:响应CommandName属性为cancel的按钮单击事件 24 使用DataList控件的方法类似于Repeater控件。下面举一个使用DataList控件的例子:
书名籍信息列表      
上面的例子中使用了一个事件按钮,我们还需要编辑响应该事件的方法: public void DataList1_DeleteCommand() { //响应删除事件的代码 } 页面运行结果如下: 25 10.6.3 GridView控件 GridView控件是最主要的数据绑定列表控件,它在表中显示来自数据源的项。GridView控件允许我们选择和编辑这些项以及对它们进行排序。使用 GridView控件可以将数据源的字段作为表中的列显示。GridView 控件中的每一行表示数据源中的一个记录。GridView 控件支持选择、编辑、删除、分页和排序。GridView控件的功能如下: , 绑定至数据源控件,如 SqlDataSource。 , 内置排序功能。 , 内置更新和删除功能。 , 内置分页功能。 , 内置行选择功能。 , 以编程方式访问 GridView 对象模型以动态设置属性、处理事件等。 , 多个键字段。 , 用于超链接列的多个数据字段。 , 可通过主题和样式进行自定义的外观。 控件的行为由它的列类型决定,不同的列类型决定控件中各列的行为。下表列出了可以使用的不同列类型。 列字段类型 说明 BoundField 显示数据源中某个字段的值。这是GridView控件的默认列类型。 ButtonField 为GridView控件中的每个项显示一个命令按钮。这使您可以创建一列自定 义按钮控件,如“添加”按钮或“移除”按钮。 CheckBoxField 为GridView控件中的每一项显示一个复选框。此列字段类型通常用于显示 具有布尔值的字段。 26 CommandField 显示用来执行选择、编辑或删除操作的预定义命令按钮。 HyperLinkField 将数据源中某个字段的值显示为超链接。此列字段类型允许您将另一个字 段绑定到超链接的URL。 ImageField 为GridView控件中的每一项显示一个图像。 TemplateField 根据指定的模板为GridView控件中的每一项显示用户定义的内容。此列字 段类型允许您创建自定义的列字段。 下面先看一个GridView控件的例子: 这个控件在网页中的外形如下: 27 在这个GridView控件里面,设置了六个常用属性,含义分别如下: 属性 说明 ID AutoGenerateColumns 是否允许自动绑定字段,如果为true,则按照数据源里字段的顺序 自动绑定;如果为false,则可以手动设定绑定哪个字段 AllowPaging 是否允许分页显示,true或false AllowSorting 是否允许排序,true或false Width 设定或获取控件的宽度 Font-Size 控件里面的文字的大小 runat 通常值为Server,指定这个控件是一个服务器控件 DataSource 设置控件的数据源,用这个属性需要手动绑定数据源 DataSourceID 数据源控件的ID,用这个属性可以自动绑定数据源 如果AutoGenerateColumns属性值设为false,则需要手动设置绑定字段。如上例,在< Columns >标记里面是我们手动设置的列。这里我们设置了两种类型的列: BoundField是GridView控件的默认列类型,用来显示数据源中某个字段的值。它的属性说明如下: DataField:数据源表中的字段名 HeaderText:列标题 标记用来设置列外观,例如字体大小,列宽度等。 HyperLinkFeild是超链接字段,允许用户设置超链接。这里我们设置了用来显示记录详细信息的超链接。HyperLinkFeild的各属性说明如下: DataTextField:数据源表中的字段名 DataNavigateUrlFields:绑定到列中的超链接URL的字段 DataTextFormatString:超链接文本 DataNavigateUrlFormatString:超链接的URL 28 这里我们设置的超链接相当于” DetailInfo.aspx?id = 该记录bookid字段的值 ”。 我们还可以通过设置属性来编辑GridView里面的数据。下面的例子通过设置GridView和数据源的属性,使得GridView控件可以编辑里面的记录: 这里我们设置了GridView控件的数据源为一个SqlDataSource控件。把GridView控件的DataSourceID属性设为SqlDataSource控件的ID。这样就把GridView控件和数据源绑定在一起。如果不设置DataSourceID属性而是设置DataSource属性,那么需要手动绑定数据源。GridView控件的AutoGenerateDeleteButton属性和AutoGenerateEditButton属性用来自动生成删除按钮和编辑按钮 SqlDataSource控件是ASP.NET里面的一种最常用的数据源控件,用来为数据显示控件提供数据源。其它的数据源控件还有XmlDataSource、ObjectDataSource和AccessDataSource 等。从它们的名字可以知道,它们分别用来提供不同类型的数据源。 在SqlDataSource控件里面设置了SelectCommand属性,就可以执行选择查询,把查询结果返回到GridView控件里显示。UpdateCommand和DeleteCommand分别执行更新查询和删除查询,它们对应GridView控件里面的更新按钮和删除按钮。ConnectionString属性代表数据库连接字符串,ProviderName代表数据提供者名。 上面的例子运行结果如下: 29 点击编辑按钮后,页面显示如下: 10.8 专家点拨 本章主要介绍ADO.NET的内容。ADO.NET也是.NET框架的一部分,是一系列提供数据访问服务的类。也是最新的数据库访问技术。利用ADO.NET提供的类可以访问SQL Server、Oracle等数据库,OLE DB和XML数据源等。 接下来介绍了ADO.NET访问数据库的对象。其中SqlConnection用来进行数据库连接,SqlCommand对象用来向数据库传递SQL语句或者存储过程,返回操作结果。它们是最基本的数据访问对象。SqlDataReader用来得到只读的结果集。DataSet是一个比较重要的对象,它表示内存中的表集。当数据库执行完查询以后,返回查询结果集,可以由SqlDataAdapter对象填充到DataSet中,缓存在内存中。一个DataSet对象可以由多个DataTable对象组成,每个DataTable就相当于一张内存表,而DataTable又由DataColumn和DataRow组成。我们可以创建DataColumn和DataRow对象,加入到DataSet中,从而手动创建DataSet对象。 了解了这些对象之后我们应当知道如何进行具体的数据库操作。SqlCommand对象有四种方法,分别是ExecuteReader、ExecuteNonQuery、ExecuteScalar和ExecuteXmlReader,它们都是数据库操作方法,但是功能各有不同。ExecuteReader返回SqlDataReader对象;ExecuteNonQuery只是用来执行SQL操作,可以返回受影响的行数,但是不返回结果集;ExecuteScalar返回查询所返回的结果集中第一行的第一列;而ExecuteXmlReader返回XmlReader 对象。 最后我们介绍了主要的数据访问服务器控件,这样就把ADO.NET和ASP.NET结合了起来,利用控件来访问数据库。读者需要了解这些控件的主要属性和事件,知道怎样通过设 30 置它们的属性和事件处理方法来完成数据访问。特别需要注意的是,这些数据访问控件的共有属性DataSource属性和DataSourceID属性的区别。 10.9 练习与指导 10.9.1简答题 1、简述什么是ADO.NET,它和ASP.NET有什么关系, 2、ADO.NET对象模型时怎样的,有哪些对象, 3、SqlConnection对象有什么作用, 4、SqlCommand对象有哪些操作数据库的方法, 5、分析ExecuteReader和ExecuteNonQuery的区别 6、简述数据访问服务器控件的DataSource属性和DataSourceID属性的区别 10.9.2操作题 1、写一段利用SqlConnection对象连接数据库的代码 2、用代码手动创建一个DataTable,要求加入至少两个DataColumn和两个DataRow 3、写一段代码使用DataAdapter填充DataSet 4、做一个ASP.NET页面,加入一个GridView控件和一个SqlDataSource控件,执行一个SQL查询,把查询结果在GridView控件里面显示出来,要求能够自动分页显示,并且能够对里面的数据进行编辑。 31
本文档为【第十章 ADO&#46;NET技术】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_751406
暂无简介~
格式:doc
大小:183KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-09-26
浏览量:16