ADO.NET主要分为五个对象:
1)Connection对象:用来连接程序与数据库。没有利用连接对象将数据库打开,是无法从数据库中取得数据的。Close和Dispose的区别,Close之后还可以用Open打开数据库,Dispose是释放资源,Dispose之后将不能再用Open。
2)Command对象:主要迎来对数据库发出一些指令,例如增删改查等指令,另外也可以调用数据库中的存储过程,这个对象时架构在Connection对象上,也就是Command对象是透过Connection连接到数据源。
3)DataAdapter:主要用在数据源以及DataSet之间执行数据传输的工作,可以通过Command对象下达命令之后,将取得的数据放入DataSet中,这个对象是架构在Command对象上,并提供了许多配合DataSetshiyong 的功能。
4)DataSet:这个对象可是看作是一个暂存区(暂时存储区域),可以把从数据库中所查询到的数据保留起来,甚至可以将整个数据库显示出来,DataSet是存放在内存中的,DataSet不仅可以存储多个Table,还可以通过DataAdapter对象取得一些例如主键的呢过的数据表结构,并可以记录数据表之间的关联。DataSet对象可以说是ADO.NET中的重量级对象,这个对象架构在DataAdapter对象上,本身不具备和数据源沟通的能力,也就是说,我们是将DataAdapter对象当做是DataSet与数据源DB之间的桥梁 ,DataSet中包含若干DataTable,DataTable中包含若干DataRow。
5)DataReader:当我们只需要循环的读取数据而不需要其他的操作的时候,可以使用DataReader对象。DataReader对象只是一次一条向下循环的读取数据源中的数据,这些数据是存在数据库服务器中的,而不是一次性加载到程序的内存中的,只能读取到当前行的数据,而且这些数据只是只读的,并不允许其他操作。因为DataReader在读取数据的时候限制了一次一条的读取,而且只能只读,所以使用起来不但节省资源而且效率很好,使用DataReader对象除了效率好之外,因为不用把数据全部传回,因此可以降低网络的负载。
总结:ADO.NET使用Connection对象来连接数据库,使用Command对象或DataAdapter对象来执行SQL语句,并将执行的结果返回给DataReader或者DataAdapter,然后在使用取得的DataReader或者DataAdapter对象操作数据结果。
以下是常用的sqlHelper.cs(部分功能实现):
using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Web; using System.Data; using System.Data.SqlClient; namespace WebApplication1.WebHelper { public static class SqlHelper { //取得连接字符串 public static readonly string connString = ConfigurationManager.ConnectionStrings["defaultConnString"].ConnectionString; //sql操作过程:打开连接-->创建命令-->给sql语句-->执行语句-->处理结果 public static int ExecuteNonQuery(string sql) { using (SqlConnection conn = new SqlConnection(connString)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; //返回执行sql语句影响的行数 return cmd.ExecuteNonQuery(); } } } public static object ExecuteScalar(string sql) { using (SqlConnection conn = new SqlConnection(connString)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; return cmd.ExecuteScalar(); } } } //只用来执行查询结果比较少的sql public static DataSet ExecuteDataSet(string sql) { //方法1 //using (SqlConnection conn = new SqlConnection(connString)) //{ // conn.Open(); // using (SqlCommand cmd = conn.CreateCommand()) // { // cmd.CommandText = sql; // SqlDataAdapter adapter = new SqlDataAdapter(cmd); // DataSet ds = new DataSet(); // adapter.Fill(ds); // return ds; // } //} //方法2 using (SqlConnection conn = new SqlConnection(connString)) { SqlCommand cmd = new SqlCommand(); PrepareCommand(cmd,conn,sql); using (SqlDataAdapter adapter = new SqlDataAdapter(cmd)) { DataSet ds = new DataSet(); adapter.Fill(ds); return ds; } ; } } public static void PrepareCommand(SqlCommand cmd,SqlConnection conn, string sql) { if (conn.State != ConnectionState.Open) { conn.Open(); } cmd.Connection = conn; cmd.CommandText = sql; } } }