1 【ADO.NET】
ado.net 是一种数据访问技术,使得应用程序能够连接到数据存储,并以各种方式操作存储在里面的数据。
2 【ADO.NET五大常用对象】
Connection(连接数据库)
Command (执行T-SQL语句)
DataAdapter (用户填充DataSet,断开模式)
DataReader(读取数据库,一种只读模式,只向前的)
DataSet(数据集,好比电脑的内存)
3 Connection和Command对象
Connection对象也称为数据库连接对象,负责对数据源的连接。所有Connection对象的基类都是DbConnection。Connection对象有两个重要属性。
ConnectionSting,表示用于打开SQL Server数据库的字符串;
State,表示当前的Connection的连接状态Open()或者Close();
可以通过配置一个数据控件得到连接数据库的连接字符串
Data Source=.;Initial Catalog=Xk;Persist Security Info=True;User ID=sa;Password=sa;
SqlConnection conn = new SqlConnection("连接字符串");
conn.Open();
Command对象也称之为数据命令对象,主要执行增删查改数据的操作命令,也可以用于执行存储过程。Command对象的三个主要方法。
public override int ExecuteNonQuery(),执行一个SQL语句,返回受影响的行数。这个方法主要用来执行增加,更新和删除操作。
public SqlDataReader ExecuteReader(),执行一个查询的SQL语句,返回一个DataReader对象。
public override Object ExecuteScalar(),从数据库中检索单个值,这个方法主要用于统计操作。
4 DataReader对象
DataReader是一个读取行的只读流的方式,绑定数据时比使用数据集方式性能更高,因为它是只读的,如果要对数据库中数据进行修改就要借助其他方法将所做更改保存到数据库中。
DataReader不能直接实例化,只能是通过相关的Command对象来创建实例,比如上面的用SqlCommand对象的实例的SqlDataReader来创建SqlDataReader对象实例。
DataReader对象读取数据时要与数据库保持连接,读取完后,通过Close()关闭。
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
CommandBehavior.CloseConnection 在关闭Reader的同时关闭connection。
5 DataAdapter对象
DataAdapter也被称之为数据适配器对象,DataAdapter利用Connection对象连接的数据源,使用数据库命令对象Command规定的操作从数据源中检索出数据送入数据集对象DataSet,或者将数据集中经过编辑后的数据送回数据源。
DataAdapter将数据填充到数据集时调用的方法是Fill()方法。语法如下:
dataAdapter.Fill(dataTable); //填充数据表
dataAdapter.Fill(dataSet,"Student"); //填充数据集中Student表
6 DataSet对象
DataSet对象称为数据集对象,用于表示那些存储在内存中的一个数据库,它相当于内存中的一个数据库,至少包括多个DataTable对象和DataView对象。由于DataSet提供了一个离线的数据源,这样就减轻了数据库和网络的负担,在设计程序时可以将DataSet作为程序的数据源。
7 DataTable对象
DataTable对象时ADO.NET的核心对象,和普通数据库中的表一样主要包括行和列。数据行DataRow,数据列DataColumn。
一个将学生表绑定到Repeater控件的Demo,代码如下:
数据库连接配置在web.config中配置
<connectionStrings>
<add name="testConnection" connectionString="Data Source=.;Initial Catalog=Xk;Persist Security Info=True;User ID=sa;Password=sa"/>
</connectionStrings>
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="connection.aspx.cs" Inherits="connection" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> <p>例1,我们将通过connection和command对象讲数据绑定到Repeater控件上</p> </div> <div> <asp:Repeater ID="Repeater1" runat="server"> <HeaderTemplate> <table border="1" width="80%" align="center"> <tr> <td>学号</td> <td>班级号</td> <td>姓名</td> <td>密码</td> </tr> </HeaderTemplate> <ItemTemplate> <tr><td><%#Eval("StuNo")%></td> <td><%#Eval("ClassNo")%></td> <td><%#Eval("StuName")%></td> <td><%#Eval("Pwd")%></td></tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:Repeater> </div> </form> </body> </html>
后台代码:
using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class connection : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //GetDataReader(); GetDataAapter(); } //通过DataReader来获取数据 private void GetDataReader() { SqlConnection conn = Conn(); string sql = "select top 10 * from Student"; SqlCommand cmd = new SqlCommand(sql, conn); conn.Open(); //得到一个Reader实例,使用CommandBehavior这个参数以便在关闭Reader的同时关闭Connection SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); // while (reader.Read()) // { // Response.Write(reader.GetString(0) + " " + reader.GetString(1) + " " + reader.GetString(2) + " " + reader.GetString(3)+"<br/>"); // } // Repeater1.DataSource = reader; Repeater1.DataBind(); reader.Close(); } //通过DataAdapter检索数据送往数据集对象 private void GetDataAapter() { SqlConnection conn = Conn(); string sql = "select top 10 * from Student"; SqlCommand cmd = new SqlCommand(sql, conn); SqlDataAdapter adapter = new SqlDataAdapter(cmd); // SqlDataAdapter adapter = new SqlDataAdapter(sql,conn); 这样写和上面是等效的 DataTable dt = new DataTable(); //将检索的数据送到数据集对象中 //adapter.Fill(dt); //Repeater1.DataSource = dt; //Repeater1.DataBind(); //这一种的话 就是先填充到数据集DataSet的某张表中,然后从表中读取数据,相比下直接填充到DataTable更加 DataSet ds = new DataSet(); adapter.Fill(ds, "test"); dt = ds.Tables["test"]; Repeater1.DataSource = dt; Repeater1.DataBind(); } private SqlConnection Conn() { //读取web.config数据库连接配置对象 string ConnStr = ConfigurationManager.ConnectionStrings["testConnection"].ConnectionString; //实例化SqlConnection对象 SqlConnection con = new SqlConnection(ConnStr); return con; } }
【小结】
之前学习用到的数据库操作基本都是用SQLHelper.cs这个类中的方法来实现简单的增查改,具体怎么实现的一知半解,只知道一个DataTable,至于几次笔试ADO.NET 五大对象都不知道,真是丢人。
上述笔记总结均来自于《ASP.NET夜话》这本书。
1 SqlConnection 是用来建立连接的
2 SqlCommand 是用来执行操作指令的
3 DataReader读取行只读流形式读取数据库数据,读取数据过程要与数据库保持连接
4 DataAdapter,适配器,利用Command对象的规定操作检索数据送往数据集对象
5 DataSet和DataTable,它们都是数据容器用来存放数据的,DataSet可以看成是内存中的一个数据库,而DataTable是内存中的一张数据表,数据库中可以有多张数据表。