网站开发基础教程7_第1页
网站开发基础教程7_第2页
网站开发基础教程7_第3页
网站开发基础教程7_第4页
网站开发基础教程7_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ASP.NET 4.0网站建设基础教程主编:王 翔LOGO第七章第七章 ADO.NET访问数据库访问数据库在ASP.NET中,提供了一系列的数据源控件,如:SqlDataSource等,通过这些控件,开发人员就能够简单快捷甚至无须编程可以建立数据连接并进行相应的数据操作。但是考虑到访问效率与操作灵活性等方面的问题,实际的开发中很少会使用数据源控件完成数据访问,而多采用ADO.NET的方式。ADO.NET是.NET Framework中的一系列类库,它能够让开发人员更加方便、灵活的在Web应用程序中使用和操作数据。在ADO.NET中,大量的复杂的数据操作的代码被封装起来,所以当开发人员在ASP.

2、NET应用程序开发中,仍然只需要编写少量的代码即可完成大量的复杂操作。LOGO7.1 ADO.NET概述ADO.NET是.NET框架下的一种新的数据访问编程模型,是一组处理数据的类,它用于实现数据库中数据的交互,同时提供对XML的强大支持。在ADO.NET中,使用的是数据存储的概念,而不是数据库的概念。简言之,ADO.NET不但可以处理数据库中的数据,而且还可以处理其他数据存储方式中的数据,例如XML格式、Excel格式和文本文件的数据。ADO .NET具有如下新特点。(1) 断开式连接技术(2) 数据集缓存技术(3) 更好的程序间共享(4) 易维护性(5) 可编程性(6) 高性能与可扩展性L

3、OGO7.2 初识ADO.NET核心组件DataAdapterSelectCommandInsertCommandUpdataCommandDelectCommandConnection事务Command参数DataReaderDataSetDataTableCollectionDataRowCollectionDataColumnCollectionConstraintCollectionDataTableXMLDataRelationCollection数据库NET Framework数据提供程序数据提供程序 LOGO7.3 Connection对象在ADO.NET中,可以使用Connec

4、tion对象来连接到指定的数据源。若要连接到Microsoft SQL Server 7.0版或更高版本,使用SQL Server数据提供程序的SqlConnection对象;若要连接到OLE DB数据源或Microsoft SQL Server 6.x版或较早版本,使用OLE DB数据提供程序的OleDbConnection对象。在使用数据提供程序的核心对象前,应首先引入对象所在的命名空间,示例代码如下所示:using System.Data.SqlClient;/使用SQL命名空间using System.Data.Oledb/使用Oledb命名空间Connection对象中最重要的属性是

5、ConnectionString,该属性用来指定建立数据库连接所需要的连接字符串。LOGO参 数说 明Data Source 设置需连接的数据库服务器名Initial Catalog 设置连接的数据库名称Integrated Security 服务器的安全性设置,是否使用信任连接。值有True、False和SSPI三种,True和SSPI都表示使用信任连接Workstation Id 数据库客户端标识。默认为客户端计算机名Packet Size 获取与SQL Server通信的网络数据包的大小,单位为字节,有效值为51232 767,默认值为8192 User ID 登录SQL Server的

6、账号Password登录SQL Server的密码Connection Timeout 设置SqlConnection对象连接SQL数据库服务器的超时时间,单位为秒。若在所设置的时间内无法连接数据库,则返回失败。默认为15秒LOGO以Visual Studio 2010自带的SQL Server 2008 Express数据库的连接为例,代码如下所示:SqlConnection conn = new SqlConnection(); /创建SQL Server的连接对象conn conn.ConnectionString = Data Source=.SQLEXPRESS; /服务器名与实例名

7、user id=sa;password=123456;/登录账号及密码Initial catalog=newsSystem; Integrated Security=False; /连接数据库名及其他参数若要控制对数据库的访问,一种较为安全的方法是使用Windows 集成安全性,此时连接字符串可以修改为:conn.ConnectionString = Data Source = .SQLEXPRESS; /服务器名与实例名Initial catalog= newsSystem;/连接数据库名Integrated Security=True; /采用Windows集成安全性LOGO数据库类型 数

8、据提供程序ConnectionString属性设置示例SQL Server SQL Server数据提供程序Server=.;DataBase=Northwind;user id=sa;password=; Access OLE DB数据提供程序Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c: myAccess.mdb Oracle Oracle 数据提供程序Data Source=Servername;user=yourusername;password=yourpwd; 方 法说 明Open() 使用 ConnectionString 所指定

9、的属性设置打开数据库连接Close() 关闭与数据库的连接。这是关闭任何打开连接的首选方法ChangeDatabase() 在打开连接的状态下,更改当前数据库Dispose() 调用Close()方法关闭与数据库的连接,并释放所占用的系统资源LOGO7.4 Command对象当建立了与数据源的连接后,就可以利用Command对象来执行命令并从数据源中返回结果。例如,当需要执行一条插入语句或者删除数据库中的某条数据记录的时候,就可以使用Command对象。通常情况下,Command对象用于数据的操作,例如执行数据的插入和删除,也可以执行数据库及表结构的更改。示例代码如下所示:conn.Open(

10、);/打开数据库连接/建立Command对象SqlCommand cmd = new SqlCommand(select * from news ,conn);LOGOCommand对象还公开了几种可用于执行所需操作的Execute方法。当以数据流的形式返回结果时,使用ExecuteReader方法可返回DataReader对象。使用ExecuteScalar方法可返回单个值。使用ExecuteNonQuery方法可执行不返回行的命令。Command对象的常用属性及方法见表。属性/方法说 明CommandText 取得或设置要对数据源执行的SQL命令、存储过程或数据表名CommandType

11、获取或设置命令类别,可取值有StoredProcedure、TableDirect、Text,代表的含义分别为存储过程、数据表名和SQL语句,默认为Text Connection 获取或设置Command对象所使用的数据连接属性Parameters SQL命令参数集合Cancel() 取消Comand对象的执行CreateParameter 创建Parameter对象ExecuteNonQuery() 执行CommandText属性指定的内容,返回数据表被影响行数ExecuteReader() 执行CommandText属性指定的内容,返回DataReader对象ExecuteScalar()

12、 执行CommandText属性指定的内容,返回结果表第一行、第一列的值ExecuteXmlReader() 执行CommandText属性指定的内容,返回XmlReader对象。只有SQL Server才能用此方法LOGO7.5 DataReader对象使用DataReader可以从数据库中检索只读、只向前的数据流。查询结果在查询执行时返回,并存储在客户端的网络缓冲区中,直到使用DataReader的Read方法对它们发出请求。使用DataReader可以提高应用程序的性能,因为一旦数据可用,DataReader就立即检索该数据,而不是等待返回查询的全部结果;并且在默认情况下,该方法一次只在

13、内存中存储一行,从而降低了系统开销。使用 DataReader检索数据前,必须首先创建Command对象实例,并通过调用 Command对象的 ExecuteReader方法创建一个DataReader,示例如下:SqlDataReader myReader = cmd.ExecuteReader();在创建了DataReader对象后,就可以使用Read方法从查询结果中获取行。通过向DataReader传递列的名称或序号引用,可以访问返回行的每一列。不过,为了实现最佳性能,DataReader提供了一系列方法,它们能够访问其本机数据类型(GetDateTime 、GetDouble、GetG

14、uid、GetInt32等)形式的列值。LOGO属 性/方 法说 明FieldCount获取当前行中的列数HasRows指示DataReader是否包含查询结果,为True表示有查询结果IsClosed获取DataReader对象的状态,为True表示已关闭Read()读取下一条记录,为True表示有下一条记录,False表示没有下一条记录返回True表示有下一条记录,返回False表示没有下一条记录Close()关闭 DataReader 对象GetBoolean(ColIndex)获取指定列的布尔值形式的值, ColIndex为列序号,序号从0开始,下同GetByte(ColIndex)获

15、取指定列的字节形式的值GetChar(ColIndex)获取指定列的单个字符串形式的值GetDateTime(ColIndex) 获取指定列的DateTime对象形式的值GetDecimal(ColIndex) 获取指定列的 Decimal 对象形式的值GetDouble(ColIndex)获取指定列的双精度浮点数形式的值GetFieldType(ColIndex) 获取指定对象的数据类型GetFloat(ColIndex)获取指定列的单精度浮点数形式的值GetInt32(ColIndex)获取指定列的 32 位有符号整数形式的值GetInt64(ColIndex)获取指定列的 64 位有符号

16、整数形式的值GetName(ColIndex)获取指定列的名称GetString(ColIndex)获取指定列的字符串形式的值GetValue(ColIndex)获取以本机格式表示的指定列的值LOGO【案例案例7-1】综合运用已介绍的三个核心对象,将newsSystem数据库中的news表的id字段(新闻编号)及title字段(新闻标题)在页面中输出显示。LOGOusing System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web

17、.UI.WebControls;using System.Data.SqlClient; /引入数据提供程序所在的命名空间public partial class chapter7_1 : System.Web.UI.Page protected void Page_Load(object sender, EventArgs e) SqlConnection conn = new SqlConnection(); conn.ConnectionString = Data Source=.SQLEXPRESS;Initial Catalog=newsSystem;Integrated Secur

18、ity=True; conn.Open(); SqlCommand cmd = new SqlCommand();/使用不带参数的构造函数 cmd.CommandText = select * from news; cmd.Connection = conn; SqlDataReader myReader = cmd.ExecuteReader();/创建DataReader对象 if (myReader.HasRows) /判断是否有查询结果 while (myReader.Read()/按行读取 /按字段数据类型获取列值 Response.Write(新闻编号:+myReader.GetI

19、nt32(0)+); Response.Write(新闻标题:+myReader.GetString(1)+); else Response.Write(查询结果为空!); myReader.Close(); conn.Close(); LOGO7.6 DataAdapter对象n 7.6.1 DataAdapter对象的常用属性对象的常用属性使用DataAdapter对象可以读取、添加、更新和删除数据源中的数据。DataAdapter提供了以下4个主要属性,分别用来管理数据操作的“增”、“删”、“改”、“查”四个动作。p SelectCommand属性:该属性用来从数据源中检索数据。p In

20、sertCommand属性:该属性用来向数据源中插入数据。p DeleteCommand属性:该属性用来删除数据源里的数据。p UpdateCommand属性:该属性用来更新数据源里的数据。例如,可以通过如下代码给DataAdapter对象的SelectCommand属性赋值。/ 创建DataAdapter对象SqlDataAdapter sda = new SqlDataAdapter();/给DataAdapter对象的SelectCommand属性赋值,conn为已打开的数据源连接sda.SelectCommand = new SqlCommand(select * from user,

21、 conn);/后续代码同样,可以使用上述方式给InsertCommand、DeleteCommand和UpdateCommand属性赋值。LOGOn 7.6.2 DataAdapter对象的常用方法对象的常用方法1. Fill方法该方法主要用来把数据源的数据填充到DataSet中的指定数据表中,返回值是影响DataSet的行数。该方法的有以下两种常用形式:int Fill (DataSet dataset) int Fill (DataSet dataset,string srcTable)如:da.Fill (ds, news)其中,da为DataAdapter对象实例,ds为要填充数据的

22、数据集对象,news为数据集中的数据表名。当da调用Fill方法时会执行存储于数据适配器SelectCommand中的查询,并将结果存储在数据表news中,若数据表不存在,则自动创建该对象。LOGO2. int Update(DataSet dataSet)方法当程序调用Update方法时,DataAdapter将检查参数DataSet每一行的RowState属性,根据RowState属性来检查DataSet里的每行是否改变和改变的类型,并依次执行所需的INSERT、UPDATE或DELETE语句,并最终将改变提交到数据源中。这个方法返回影响DataSet的行数。更准确地说,Update方法会

23、将更改解析回数据源,但自上次填充DataSet以来,其他客户端可能已修改了数据源中的数据。若要使用当前数据刷新DataSet,应使用DataAdapter 和Fill方法。新行将添加到该表中,更新的信息将并入现有行。Fill方法通过检查DataSet中行的主键值及SelectCommand返回的行来确定是要添加一个新行还是更新现有行。如果Fill方法发现 DataSet 中某行的主键值与SelectCommand返回结果中某行的主键值相匹配,则它将用SelectCommand返回的行中的信息更新现有行,并将现有行的 RowState 设置为Unchanged。如果SelectCommand返回

24、的行所具有的主键值与DataSet中行的任何主键值都不匹配,则Fill方法将添加RowState为Unchanged的新行。LOGO7.7 DataSet对象DataSet是一种驻留内存的数据缓存,相当于内存中暂存的数据库,可以表示包括相关表、约束和表间关系在内的整个数据集。主要由DataRelationCollection(数据关系集合)、DataTableCollection(数据表集合)和ExtendedProperties对象组成。LOGOn 7.7.1 数据表和数据表集合数据表和数据表集合1. 数据表(DataTable)创建DataTable时,不需要为TableName属性提供值

25、,可以在其他时间指定该属性,或者将其保留为空。但是,在将一个没有TableName值的表添加到 DataSet 中时,该表会得到一个从Table0开始递增的默认名称TableN。可以使用相应的DataTable构造函数创建DataTable对象。如:DataTable dtNews= new DataTable(news);/创建DataTable对象并指定表名为newsLOGO属性/方法说 明Columns 获取数据表的所有字段,即DataColumnCollection集合DataSet 获取DataTable对象所属的DataSet对象DefaultView 获取与数据表相关的DataV

26、iew对象。DataView对象可用来显示DataTable对象的部分数据。可通过对数据表选择、排序等操作获得DataView(相当于数据库中的视图)PrimaryKey 获取或设置数据表的主键Rows 获取数据表的所有行,即DataRowCollection集合TableName 获取或设置数据表名Copy() 复制DataTable对象的结构和数据,返回与本DataTable对象具有同样结构和数据的DataTable对象NewRow() 创建一个与当前数据表有相同字段结构的数据行GetErrors() 获取包含错误的DataRow对象数组LOGO2. 数据表集合(DataTableColl

27、ection)DataSet的所有数据表包含于数据表集合DataTableCollection中,可以通过DataSet的Tables属性访问DataTableCollection。DataTableCollection有以下两个属性。 Count:DataSet对象所包含的DataTable个数。 Tablesindex,name:获取DataTableCollection中下标为index或名称为name的数据表。例如:ds.Tables0 /表示数据集对象ds中的第一个数据表ds.Tables1 /表示数据集对象ds中的第二个数据表ds.Tablesnews/表示数据集对象ds中名称为“

28、news”的数据表可以通过使用Add方法将DataTable添加到DataTable对象的Tables集合中,再将其添加到DataSet中。例如:ds.Tables.Add(news);/将名称为news的数据表添加到数据集ds中LOGOn 7.7.2 数据列和数据列集合数据列和数据列集合1. 数据列(DataColumn)在创建DataTable后,它并没有一个结构,因此要定义表的结构。数据表的结构由列和约束表示,所以首先需要通过DataColumn对象创建列并将其添加到DataTable的Columns集合中。以下示例代码创建了一个名为“news”的数据表,并定义了表结构,它由id、tit

29、le、content三列构成。LOGODataTable dtNews = new DataTable(news);DataColumn col1, col2, col3;col1 = new DataColumn(id);/创建第一列,初始化时指定列名 /使用DataType指定数据类型col1.DataType = System.Type.GetType(System.Int32); dtNews.Columns.Add(col1);/将第一列添加到news表中 col2 = new DataColumn();col2.ColumnName = title;/使用ColumnName指定列

30、名col2.DataType = System.Type.GetType(System.String); dtNews.Columns.Add(col2);/初始化的同时指定列名与数据类型col3 = new DataColumn(content, typeof(string); dtNews.Columns.Add(col3); /直接生成新列并添加到表中dtNews.Columns.Add(new DataColumn(createTime, typeof(DateTime);LOGO2. 数据列集合(DataColumnCollection)数据表中的所有列都被存放于数据列集合DataC

31、olumnColection中,通过DataTable的Columns集合可以访问DataColumnCollection。例如:dtNews.Columnsi.Caption /代表dtNews数据表第i列的标题DataColumnColection有以下2个属性: Count:数据表所包含的列个数。 Columnsindex,name:获取下标为index或名称为name的字段。例如:DS.Tables0.Columns0/表示获取数据表DS.Tables0中的第一列DS.Tables0.Columnsid/表示获取数据表DS.Tables0的名为“id”的列LOGOn 7.7.3 数据行

32、和数据行集合数据行和数据行集合1. 数据行(DataRow)若要向数据表中添加一个新行,需要首先声明一个DataRow对象实例。当调用数据表的NewRow方法时会返回一个新的DataRow对象,然后数据表会根据DataColumnCollection定义的表结构来创建DataRow对象,示例代码如下:DataRow dr= dtNews.NewRow(); 向数据表添加新行之后,可以使用索引或列名来操作新行,如:dr0=12; dr1=最新新闻; 或: drid=12; drtitle= 最新新闻; 在将数据插入新行后,可以使用Add方法将该行添加到DataRowCollection中:dtNews.Rows.Add(dr);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论