1 / 25

第 11 章 ADO.NET 数据访问技术

第 11 章 ADO.NET 数据访问技术. 内容提要. ADO.NET 的结构。 Connection 对象 Command 对象 DataReader 对象 DataAdapter 对象. ADO.NET 的结构. 数据提供程序. 数据提供程序的四个核心对象. SQL Server .NET 数据提供程序.

randi
Télécharger la présentation

第 11 章 ADO.NET 数据访问技术

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第11章 ADO.NET数据访问技术

  2. 内容提要 • ADO.NET的结构。 • Connection对象 • Command对象 • DataReader对象 • DataAdapter对象

  3. ADO.NET的结构

  4. 数据提供程序 • 数据提供程序的四个核心对象

  5. SQL Server .NET 数据提供程序 • 对应SQL Server.NET的4个核心对象分别是:SqlConnection、SqlCommand、SqlDataReader和SqlDataAdapter。这4个对象包含在System.Data.SqlClient命名控件中,需要将这个命名空间引入到文件中。 • SQL Server.NET数据提供程序对SQL Server数据库的底层操作进行了封装,可以更加快捷的访问SQL Server数据库。目前主要用来操作SQL Server 2000、SQL Server2005 、SQL Server2008 。

  6. OLE DB .NET 数据提供程序 • 对应OLE DB .NET的4个核心对象分别是:OleDbConnection、OleDbCommand、OleDbDataReader和OleDbDataAdapter。这4个对象包含在System.Data.OleDb命名控件中,需要将这个命名空间引入到文件中 • 目前主要用来访问Access、Foxpro等简单的数据源。

  7. Oracle DB .NET数据提供程序 • 对应Oracle DB .NET的4个核心对象分别是:OracleConnection、OracleCommand、OracleDataReader和OracleDataAdapter。这4个对象包含在System.Data.OracleClient命名控件中,需要将这个命名空间引入到文件中。

  8. DataSet简介 • ADO.NET的核心组件是DataSet,DataSet中常用的对象是DataTable和DataRow等等。 • DataSet通过DataAdapter对象从数据源得到数据,DataAdapter是连接DataSet和数据库的一个桥梁,因此命名为:“数据适配器”。

  9. Connection对象 案例名称:使用Connection对象连接Access数据库 Using System.Data.OleDb; void Page_Load(Object sender, EventArgs e) { OleDbConnection Conn; Conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+ "Data Source="+Server.MapPath("School.mdb")); Conn.Open(); Message.Text=Conn.State.ToString(); Conn.Close(); } <asp:Label id="Message" runat="server" />

  10. 使用Connection对象连接SQL Server数据库 案例名称:使用Connection对象连接SQL Server数据库 using System.Data.SqlClient; void Page_Load(Object sender, EventArgs e) { SqlConnection Conn; Conn=new SqlConnection("server=localhost;database=School;uid=sa;pwd=''"); //Conn = new SqlConnection(@"Data Source=zmr-pc;Initial Catalog=School; //Integrated Security=True"); Conn.Open(); Message.Text=Conn.State.ToString(); Conn.Close(); } <asp:Label id="Message" runat="server" />

  11. 用数据控件连接数据 • 详细步骤如下: • (1)把“工具箱”里的SqlDataSource控件拖到页面上。 • (2)单击控件右上角的三角形,选择“配置数据源”命令,弹出“配置数据源”对话框 。 • (3)单击“新建连接”按钮,在弹出的“添加连接”对话框里填入服务器名、用户名、密码之后在下方选择一个数据库,单击“测试连接”按钮。

  12. Command对象 • 建立数据连接以后,利用Command对象来执行命令并从数据源返回结果。 • Command对象常用的构造函数包括两个参数:(1) 要执行的SQL语句,(2) 已经建立的Connnection对象,基本语法是: String strsql = "select Name from Users where UserID = 10"; SqlCommand com = new SqlCommand(strsql,con);

  13. 1.Command对象的方法 • 方法有ExecuteReader() 、ExecuteScalar() 和ExecuteNonQuery() ,这些方法用来执行SQL语句。 • (1)ExecuteReader方法:将返回一个记录集给DataReader对象。 下面使用ExecuteReader方法列出学校网站数据库School的栏目表Columns里的数据,程序代码如下: protected void Page_Load(object sender, EventArgs e) { SqlConnection con = new SqlConnection ("Server=zmr-pc; Database=School; User ID=sa;Password="); SqlCommand com = new SqlCommand("select * from Columns ", con); con.Open(); SqlDataReader dr = com.ExecuteReader(); GridView1.DataSource = dr; GridView1.DataBind(); con.Close(); }

  14. (2)ExecuteScalar方法:执行指定的SQL语句,它从查询中返回第一行第一列的值。该方法只能执行Select命令。比较适合用在Select命令中带avg()、sum()、count()等求值函数,返回单一值的情况。(2)ExecuteScalar方法:执行指定的SQL语句,它从查询中返回第一行第一列的值。该方法只能执行Select命令。比较适合用在Select命令中带avg()、sum()、count()等求值函数,返回单一值的情况。 protected void Page_Load(object sender, EventArgs e) { SqlConnection con = new SqlConnection ("Server=zmr-pc; Database=School; User ID=sa;Password=123456"); con.Open(); String strSQL = "select * from Colunms "; SqlCommand com = new SqlCommand(strSQL, con); string d = (string)com.ExecuteScalar(); Meg.Text = d; con.Close(); }

  15. (3)ExecuteNonQuery方法。ExecuteNonQuery方法用于执行不需要返回结果的命令。比如:Insert、Update、Delete命令。下面利用ExecuteQuery方法往数据库里添加一组数据。(3)ExecuteNonQuery方法。ExecuteNonQuery方法用于执行不需要返回结果的命令。比如:Insert、Update、Delete命令。下面利用ExecuteQuery方法往数据库里添加一组数据。 protected void Page_Load(object sender, EventArgs e) { SqlConnection con = new SqlConnection ("Server=zmr-pc; Database=School; User ID=sa;Password=123456"); stringStrSql = "insert into Columns values('体育新闻 ','0','0','True','')"; SqlCommand com = new SqlCommand(StrSql,con); con.Open(); com.ExecuteNonQuery(); con.Close(); }

  16. 2.Command对象的属性 三个重要属性:CommandText、CommandType和Connection。 • (1)CommandText属性:用于获取或设置对数据源执行的SQL命令、数据表或存储过程名称。 • (2)CommandType属性:描述CommandText所给出的类型。该属性的默认值为Text。它的可能值包括以下两种。 • 第一种是StoredProcedure:存储过程。CommandType属性设置为StoredProcedure时,应将CommandText属性设置为存储过程的名称。当调用“执行”方法时,将执行此存储过程。 • 第二种是Text:SQL文本命令。 • (3)Connection属性。Connection属性用于获取或设置Command对象所用到的数据源的连接对象。Command对象发出的命令都要通过该属性施加到原始数据库中。

  17. 为SqlCommand传递参数 (P126)

  18. 使用SqlCommand执行存储过程 • 若要调用存储过程,需要将Command对象的CommandType设置为StoredProcedure。CommandType设置为StoredProcedure,就可以使用Parameters集合来定义参数。 • 下面用为友情链接表(Links)添加记录。 • 创建的存储过程如下: create procedure addLinks ( @Name nvarchar(50), @Url nvarchar(50), @AddDate datetime, @UserID int, @Remark nvarchar(100) ) as insert into Links values(@Name,@Url,@AddDate,@UserID,@Remark) go

  19. 执行存储过程的代码如下: SqlConnection con = new SqlConnection ("Server=zmr-pc; Database=School; User ID=sa;Password=123456"); con.Open(); SqlCommand com = new SqlCommand("addLinks", con); com.CommandType = CommandType.StoredProcedure.ToString(); SqlParameter p1 = new SqlParameter("@Name", SqlDbType.NVarChar, 50); SqlParameter p2 = new SqlParameter("@Url", SqlDbType.NVarChar, 50); SqlParameter p3 = new SqlParameter("@AddDate", SqlDbType.DateTime, 10); SqlParameter p4 = new SqlParameter("@UserID", SqlDbType.Int, 10); SqlParameter p5 = new SqlParameter("@Remark", SqlDbType.NVarChar, 100); p1.Value = "百度"; p2.Value = "www.baidu.com"; p3.Value = "2009-01-01"; p4.Value = "4"; p5.Value = "0"; com.Parameters.Add(p1); com.Parameters.Add(p2); com.Parameters.Add(p3); com.Parameters.Add(p4); com.Parameters.Add(p5); com.ExecuteNonQuery(); con.Close();

  20. 使用DataReader对象 • 取DataReader对象的数据,有两种方法: • 1、通过和GridView等数据控件绑定,直接输出。 • 2、另一种方法是利用循环将其数据取出

  21. 可以循环使用DataReader对象的Read()方法来指向下一条数据并读取,读到最后,则Reader()会返回false,从而将所有数据输出。具体代码如下:可以循环使用DataReader对象的Read()方法来指向下一条数据并读取,读到最后,则Reader()会返回false,从而将所有数据输出。具体代码如下: • protected void Page_Load(object sender, EventArgs e) • { • SqlConnection con = new SqlConnection ("Server=localhost; • Database=School; User ID=sa;Password=123456"); • string strsql = "select * from Columns"; • SqlCommand com = new SqlCommand(strsql,con); • con.Open(); • SqlDataReader dr = com.ExecuteReader(); • while (dr.Read()) • { • Response.Write(dr["ColumnID"].ToString() + "/" + dr["ColumnName"].ToString() • + "/" + dr["ColumnSort"].ToString() + "/" + dr["FatherID"].ToString() • + "/" +dr["IsLastNode"].ToString() + "/" + dr["Remark"].ToString() + "<br>"); • } • dr.Close(); • con.Close(); • }

  22. 使用DataAdapter对象 • DataAdapter对象用于从数据源中获取数据,填充DataSet中的表和约束,并将对DataSet的更改提交回数据源。它是连接DataSet和数据源的一个桥梁,因此又命名为“数据适配器”。 • DataAdapter对象主要两个方法:Fill()和Update()方法。 • (1)Fill()方法。读取原始数据库中的数据,并将结果表装载到指定的数据集(DataSet对象中) • (2)Update()方法。用于执行由InsertCommand、DeleteCommand和UpdateCommand对象的CommandText属性指定的SQL命令,从而将数据集中的数据返回到相应的数据源,从而使原始数据库和数据集保持同步。

  23. DataAdapter对象 • 案例名称:使用DataAdapter对象构造方法执行 • protected void Page_Load(Object sender, EventArgs e) • { • SqlConnection con = new SqlConnection ("Server=zmr-pc; • Database=School; User ID=sa;Password=123456"); • con.Open(); • string strsql = "select * from Columns "; • SqlDataAdapter da = new SqlDataAdapter(strsql,con); • DataSet ds = new DataSet(); • da.Fill(ds, "grade");//将da中的数据填充到DataSet对象中 • GridView1.DataSource = ds.Tables["grade"].DefaultView; • GridView1.DataBind();//与DataGrid进行绑定 • con.Close(); • }

  24. DataSet对象 • DataSet封装在命名空间“Syste.Data”中。DataSet中可以包含任意数量的DataTable(数据表),且每个DataTable对应一个数据库中的数据表和视图。 • 通过DataAdapter的Fill方法,将表内容填充到DataSet对象中,而且可以填充多个表。利用别名来区分。比如“da.Fill(ds,"grade1");”的功能是将da对象中的数据填充到ds对象中,并起别名“grade1” 。

  25. 案例名称:自动生成DataSet对象 void Page_Load(Object sender, EventArgs e) { DataSet myds = new DataSet(); DataTable mydt = new DataTable("Squares"); DataRow mydr; mydt.Columns.Add(new DataColumn("数字",typeof(Int32))); mydt.Columns.Add(new DataColumn("平方",typeof(Int32))); for (int i = 0; i < 10; i++) { mydr = mydt.NewRow(); mydr[0] = i; mydr[1] = i * i; mydt.Rows.Add(mydr); } myds.Tables.Add(mydt); GridView1.DataSource = myds.Tables["Squares"].DefaultView; GridView1.DataBind(); } <ASP: GridView id=" GridView1 " runat="server" />

More Related