第8章 .NET数据库编程_第1页
第8章 .NET数据库编程_第2页
第8章 .NET数据库编程_第3页
第8章 .NET数据库编程_第4页
第8章 .NET数据库编程_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

重点内容:

ADO.NET

连接数据库读取数据

DataReader

填充数据集第8章ADO.NET数据库编程一、ADO.NET在ASP.NET应用程序中访问数据库要通过ADO.NET来实现。ADO.NET又被称为ActiveX数据对象(ActiveXDataObject),是从Web的角度对ADO进行检讨和改进的。ADO.NET是为了因应广泛的数据控制而设计,所以使用起来比以前的ADO更灵活有弹性,也提供了更多的功能。ADO.NET对象模型中有五个主要的组件,分别是Connection、Command、DataSetCommand、DataSet以及DataReader。在ADO.NET对象模型中,DataSet(数据集)是最重要的对象。一般来说,一个DataSet对象就是一个记录集的集合,可以通过命令用数据集合填充DataSet对象。ADO.NET提供了记录集的所有数据库功能,包括排序,分页,过滤视图,关系,索引,和主键等。可以用XML形式保持或传输任何DataSet对象,而且无需付出任何额外的代价,因为DataSet对象本身就是按照XML格式构造。Connection、Command、DataSetCommand以及DataReader是数据操作组件(ManagedProviders),负责建立联机和数据操作。数据操作组件的主要功能是作为DataSet和数据源之间的桥梁,其主要功能是负责将数据源中的数据取出后填充到DataSet数据集中,或者将数据存回数据源。为了更好地支持断开模型,ADO.NET组件将数据访问与数据处理分离。它是通过两个主要的组件:.NET数据提供程序(dataprovider)和Dataset来完成这一操作的。

1、组件结构一、ADO.NET一、ADO.NET1、组件结构ADO.NET体系结构的一个核心元素是.NET数据提供程序,它是专门为数据处理以及快速地只进、只读访问数据而设计的组件。它是包括Connection、Command、DataReader和DataAdapter对象的组件。对象名称描述Connection提供与数据源的连接Command用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令。DataReader从数据源中提供高性能的数据流DataAdapter提供连接DataSet对象和数据源的桥梁,使用Command对象在数据源中执行SQL命令,以便将数据加载到DataSet中,并使对DataSet中数据的更改与数据源保持一致。二、连接数据库1、建立SQLServer数据库(1)打开MicrosoftSQLServerManagementStudio,弹出“连接到服务器”对话框,如图所示。

二、连接数据库1、建立SQLServer数据库(2)读者选择合适的服务器名称和身份验证方式后,在“连接到服务器”对话框单击“连接”按钮,连接到SQLServer服务器。连接成功后,进入程序的主界面,如图所示。

二、连接数据库1、建立SQLServer数据库(3)在“对象资源管理器”中右键单击“数据库”,从弹出的上下文菜单中选择“新建数据库”命令,弹出如图所示的对话框。

二、连接数据库1、建立SQLServer数据库(4)在“数据库名称”中输入读者想要创建的数据库,这里输入的名称为SuperMarket,单击“确定”按钮创建SuperMarket数据库。此时读者会发现在“对象资源管理器”的“数据库”节点中增加了一个名为SuperMarket的数据库,如图所示。

二、连接数据库1、建立SQLServer数据库(5)展开SuperMarket节点,右键单击“表”节点,开始进行表编辑操作,如图所示。

二、连接数据库1、建立SQLServer数据库(6)在右侧的属性窗体中把表的名称改为Product,然后在编辑表的窗体中加入4列,最终结果如图所示。

(7)右键单击“编号”列,在弹出的上下文菜单在那个选择“设置主键”命令,“编号”成为该表的主键。此时该表如图8-8所示。

二、连接数据库1、建立SQLServer数据库(8)在“对象资源管理器”中右键单击SuperMarket数据库的product表,从弹出的上下文菜单中选择“打开表”命令,向表中输入记录。该表中的记录如图所示。

二、连接数据库2、连接SQLServer数据库SQLServer.NETFramework数据提供程序使用SqlConnection对象提供与MicrosoftSQLServer的7.0版或它的更高版本的连接。SqlConnection的构造函数定义如下所示。publicSqlConnection(stringconnectionString);其中,参数connectionString指定了用于打开SQLServer数据库的连接。程序清单8.1所示的代码示例演示了使用SqlConnection对象如何创建和打开数据库连接。使用SqlConnection对象建和打开数据库连接:stringConnStr="server=localhost;IntegratedSecurity=True; database=SuperMarket;";SqlConnection

sqlConn=newSqlConnection(ConnStr);sqlConn.Open();二、连接数据库2、连接SQLServer数据库通过VisualStudio的可视化的界面进行设置连接字符串首先要在Web页面中添加一个SqlDataSource对象,然后在属性编辑器中选择ConnectionString属性,再新建一个连接,在弹出的“选择数据源”对话框中选择“MicrosoftSQLServer”,如图所示。

二、连接数据库3、连接Access数据库用于连接Access数据库是AccessDataSource控件,该控件继承自SqlDataSource控件,但是该类不支持连接到受用户名或密码保护的Access数据库。因此这里还是通过SqlDataSource控件来实现可视化连接数据库。首先,创建一个受密码保护的Access数据库文件Northwind.mdb,该数据库包含一个名为“运货商”的表,该表的内容如图所示。

二、连接数据库3、连接Access数据库然后创建一个名为OleDbTest.aspx的网页,在Web页面上添加SqlDataSource控件后,在属性编辑器中选择ConnectionString属性,再新建一个连接,在弹出的“选择数据源”对话框中选择“MicrosoftAccess数据库文件”,然后单击“继续”按钮,弹出“添加连接”对话框,如图所示。

三、读取数据1、使用SqlCommand类SqlCommand类可以用来对SQLServer数据库执行的一个Transact-SQL语句或存储过程。SqlCommand类的CommandText属性用于获取或设置要对数据源执行的Transact-SQL语句或存储过程。CommandTimeout属性用于设置获取或设置在终止执行命令的尝试并生成错误之前的等待时间。如果SQL语句或者存储过程中使用了参数,可以通过Parameter属性为参数设置值。SqlCommand命令对象提供了以下几个基本方法来执行命令:ExecuteNonQuery:可以通过该命令来执行不需要返回值的操作,例如UPDATE、INSERT和DELETE等SQL命令。该命令不返回任何行,而只是返回执行该命令时所影响到的表行数。ExecuteScalar:它可以执行SELECT查询,但返回的是一个单值,多用于查询聚合值的情况,如使用count()或者sum()函数的SQL命令。ExecuteReader:该方法返回一个DataReader对象,内容为与命令匹配的所有行。三、读取数据1、使用SqlCommand类示例:演示如何使用SqlCommand类操作数据库

添加一个名为SqlCmdTest.aspx,在该网页的代码文件中添加代码:运行效果三、读取数据2、使用OleDBCommand类OleDBCommand的使用方法和SqlCommand非常类似,由于上一节已经介绍了如何编辑数据,这里就不再赘述。下面介绍如何在数据库文件Northwind.mdb中,进行查找记录的操作。代码如下:

三、读取数据2、使用OleDBCommand类1.protectedvoidPage_Load(objectsender,EventArgse)2.{3.Stringsqlconn="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=D:\\ZhouMingHui\\ASP.NET2.0简明教程\\代码\\Northwind.mdb;Jet

OLEDB:DatabasePassword=111111";4.OleDbConnection

myConnection=newOleDbConnection(sqlconn);5.myConnection.Open();6.OleDbCommand

myCommand=newOleDbCommand("select*from运货商",myConnection);7.OleDbDataReader

myReader;8.myReader=myCommand.ExecuteReader();9.Response.Write("<h3>使用OleDbCommand类读取数据</h3><hr>");10.Response.Write("<tableborder=1cellspacing=0cellpadding=2>");11.Response.Write("<tr

bgcolor=#DAB4B4>");12.for(inti=0;i<myReader.FieldCount;i++)13.{14.Response.Write("<td>"+myReader.GetName(i)+"</td>");15.}16.Response.Write("</tr>");17.while(myReader.Read())18.{19.Response.Write("<tr>");20.for(inti=0;i<myReader.FieldCount;i++)21.{22.Response.Write("<td>"+myReader[i].ToString()+"</td>");23.}24.Response.Write("</tr>");25.}26.Response.Write("</table>");27.myReader.Close();28.myConnection.Close();29.}三、读取数据3、使用存储过程存储过程(StoredProcedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程具有允许标准组件式编程、能够实现较快的执行速度、能够减少网络流量等优点。通过SqlCommand和OleDBCommand调用存储过程时,首先需要将其CommandType属性设置为CommandType.StoredProcedure,这表示要执行的是一个存储过程。属性的默认值为CommandType.Text,表示执行SQL命令。另外该属性值也可以设置为CommandType.TableDirect表示要直接访问数据表,此时应该把将CommandText属性设置为要访问的一个或多个表的名称。

三、读取数据3、使用存储过程示例代码:1.protectedvoidPage_Load(objectsender,EventArgse) 2.{3.Stringsqlconn="DataSource=HZIEE-2E53F913F;InitialCatalog=SuperMarket;IntegratedSecurity=True";4.SqlConnection

myConnection=newSqlConnection(sqlconn);5.myConnection.Open();6.SqlCommand

myCommand=newSqlCommand();7.myCommand.Connection=myConnection;8.myCommand.CommandType=CommandType.StoredProcedure;9.myCommand.CommandText="byType";

10.SqlParameter

parInput=myCommand.Parameters.Add("@type",SqlDbType.SmallMoney);11.parInput.Direction=ParameterDirection.Input;12.parInput.Value=2;13.SqlDataReader

myReader=myCommand.ExecuteReader();.14.Response.Write("<h3>使用存储过程查询数据</h3><hr>");15.Response.Write("<tableborder=1cellspacing=0cellpadding=2>");17.Response.Write("<tr

bgcolor=#DAB4B4>");18.for(inti=0;i<myReader.FieldCount;i++)19.{20.Response.Write("<td>"+myReader.GetName(i)+"</td>");21.}22.Response.Write("</tr>");23.while(myReader.Read())24.{25.Response.Write("<tr>");26.for(inti=0;i<myReader.FieldCount;i++)27.{28.Response.Write("<td>"+myReader[i].ToString()+"</td>");29.}30.Response.Write("</tr>");31.}32.Response.Write("</table>");33.myReader.Close();34.myConnection.Close();35.}

三、填充数据集1、使用DataAdapter数据适配器DataAdapter表示一组数据命令和一个数据库连接,它们用于填充DataSet

和更新数据源。DataAdapter经常和DataSet一起配合使用,作为DataSet

和数据源之间的桥接器以便检索和保存数据。下面是几种数据库使用数据适配器的方法:MicrosoftSQLServer数据库:可以通过将SqlDataAdapter与其关联的SqlCommand和SqlConnection对象一起使用,从而提高总体性能。对于支持OLEDB的数据源:使用DataAdapter及其关联的OleDbCommand和OleDbConnection对象。对于支持ODBC的数据源:使用DataAdapter及其关联的OdbcCommand和OdbcConnection对象。对于Oracle数据库:使用DataAdapter及其关联的OracleCommand和OracleConnection

对象。使用数据适配器SqlDataAdapter的一般步骤如下:(1)建立数据库连接(2)建立SqlCommand对象,设置要执行的SQL语句(3)建立并实例化一个SqlDataAdapter对象。如果要执行的SQL语句为Delete,则设置DeleteCommand属性为SqlCommand对象;如果要执行的SQL语句为Insert,则设置InsertCommand属性为SqlCommand对象;如果要执行的SQL语句为Select,则设置SelectCommand属性为SqlCommand对象;如果要执行的SQL语句为Update,则设置UpdateCommand属性为SqlCommand对象。(4)建立一个DataSet对象,用于接收执行SQL命令返回的数据集(5)填充数据集(6)绑定数据控件(7)关闭数据库连接四、DataReader可以使用ADO.NETDataReader从数据库中检索只读、只进的数据流。所谓“只读”,是指在数据阅读器DataReader上不可更新、删除、增加记录,所谓“只进”是指记录的接收是顺序进行且不可后退的,数据阅读器DataReader接收到的数据是以数据库的记录为单位的。查询结果在查询执行时返回,并存储在客户端的网络缓冲区中,直到用户使用DataReader的Read方法对它们发出请求。使用DataReader可以提高应用程序的性能,原因是它只要数据可用就立即检索数据,并且(默认情况下)一次只在内存中存储一行,减少了系统开销。

四、DataReader1、使用DataReader使用DataReader对象的Read方法可从查询结果中获取行。通过向DataReader传递列的名称或序号引用,可以访问返回行的每一列。不过,为了实现最佳性能,DataReader

提供了一系列方法,使用户能够访问其本机数据类型(GetDateTime、GetDouble、GetGuid、GetInt32等)的列值。DataReader

提供未缓冲的数据流,该数据流使过程逻辑可以有效地按顺序处理从数据源中返回的结果。由于数据不在内存中缓存,所以在检索大量数据时,DataReader

是一种适合的选择。当DataReader首先被填充时,它将被定位到Null记录,直至第一次调用它的Read方法。这种方法与传统ADO逻辑中默认情况下指向记录集的第一条记录是不同的。由于DataReader在执行SQL命令时一直要保持同数据库的连接,在DataReader对象在开启的状态下,DataReader将以独占方式使用Connection,该对象所对应的Connection连接对象不能用来执行其它的操作,如果Command包含输出参数或返回值,那么在DataReader关闭之前,将无法访问这些输出参数或返回值。所以在使用完DataReader对象时,一定要使用Close方法关闭该DataReader对象,否则的话不仅会影响到数据库连接的效率,更会阻止其它对象使用Connection连接对象来访问数据库。如果返回的是多个结果集,DataReader会提供NextResult方法来按顺序循环访问这些结果集。当DataReader打开时,可以使用GetSchemaTable方法检索有关当前结果集的架构信息。GetSchemaTable返回一个填充了行和列的DataTable对象,这些行和列包含当前结果集的架构信息。对于结果集的每一列,DataTable都包含一行。架构表行的每一列都映射到在结果集中返回的列的属性,其中ColumnName是属性的名称,而列的值为属性的值。四、DataReader2、示例示例:参见本书程序清单8.6.五、填充数据集1、使用DataAdapter示例:

页面代码:1.<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="DataAdapterTest.aspx.cs"Inherits="DataAdapterTest"%>2.<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd">3.<htmlxmlns="/1999/xhtml">4.<headrunat="server">5.<title>演示DataAdapter的使用</title>6.</head>7.<bodyMS_POSITIONING="GridLayout">8.<h3>使用数据适配器</h3>9. <hr/>10. <formid="Form1"method="post"runat="server">11. <asp:GridViewid="DataGrid1"runat="server"Width="816px"Height="152px"></asp:GridView>12. </form>13.</body>14.</html>五、填充数据集1、使用DataAdapter示例:

后台代码:1. protectedvoidPage_Load(objectsender,EventArgse)2.{3.Stringsqlconn="DataSource=HZIEE-2E53F913F;InitialCatalog=SuperMarket;IntegratedSecurity=True";4.SqlConnection

myConnection=newSqlConnection(sqlconn);5.myConnection.Open();6.SqlCommand

myCommand=newSqlCommand("select*fromProduct",myConnection);7.SqlDataAdapterAdapter=newSqlDataAdapter();8.Adapter.SelectCommand=myCommand;9.DataSet

myDs=newDataSet();10.Adapter.Fill(myDs);11.GridView1.DataSource=myDs.Tables[0].DefaultView;12.GridView1.DataBind();13.myConnection.Close();14.}

五、填充数据集1、使用DataAdapter示例:

运行效果五、填充数据集2、使用DataTable,DataColumn,DataRowDataSet由一组DataTable对象组成,它具备存储多个表数据以及表间关系的能力。这些表就存储在DataTable对象中,而表间的关系则用DataRelation对象表示。DataTable对象中包含了DataRow和DataColumn对象,分别存放表中行和列的数据信息。Tables属性可以获取包含在DataSet中的表的集合。DataTable的Rows属性表示数据表中行的集合,DataTable的Columns属性表示数据表中列的集合。

五、填充数据集2、使用DataTable,DataColumn,DataRow示例:1.protectedvoidPage_Load(objectsender,EventArgse)2.{3.Stringsqlconn="DataSource=HZIEE-2E53F913F;InitialCatalog=SuperMarket;IntegratedSecurity=True";4.SqlConnection

myConnection=newSqlConnection(sqlconn);5.myConnection.Open();

6.SqlCommand

myCommand=newSqlCommand("select*fromProduct",myConnection);7.SqlDataAdapterAdapter=newSqlDataAdapter();8.Adapter.SelectCommand=myCommand;9.DataSet

myDs=newDataSet();10.Adapter.Fill(myDs);11.Response.Write("<h3>使用DataTable、DataColumn和DataRow</h3><hr>");12.Response.Write("<tableborder=1cellspacing=0cellpadding=2>");13.DataTable

myTable=myDs.Tables[0];14.Response.Write("<tr

bgcolor=#DAB4B4>");15.foreach(DataColumn

myColumninmyTable.Columns)16.{17.Response.Write("<td>"+myColumn.ColumnName+"</td>");18.}19.Response.Write("</tr>");20.foreach(DataRow

myRowinmyTable.Rows)21.{22.Response.Write("<tr>");23.

温馨提示

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

评论

0/150

提交评论