一、ADO.NET是微软 . NET数据库的访问构建,主要提供一个面向对象的数据库访问构建,用来开发数据库应用程序。
ADO.NET主要包括;
Connection:主要用来提供数据库的连接功能
Command 对象用于返回数据,修改数据,运行存储过程以及发送或检索参数信息的数据库命令。
DataReader对象通过 Command对象提供从数据库检索信息的功能,它以一种只读的,向前的,快速的,方式访问数据库。
DataAdapter 对象提供连接DataSet对象和数据源的桥梁,它主要使用Command对象在数据源中执行SQL命令,以便将数据加载到DataSet数据集中,并确保DataSet数据集中数据的更改与数据源保持一致。
DataSet对象是一个数据库容器,可以把它当作是存在与内存中的数据库,无论数据源是什么,它都会提供一致的关系编程模型。
DataTable对象表示内存中数据的一个表。
二、ADO.NET中5大对象的概述:
1、Connection对象:连接数据库
2、Command对象:执行一些简单操作命令,如:增删改删。即执行T-SQL语句
Command对象在执行的的时候有几个比较重要的方法如ExecuteNonQuery方法,执行增删改命令。查询方法有2种:一个是ExecuteReader方法,返回一个DataReader对象。还有ExecuteScale方法,返回首行首列。
3、DataAdapter对象:数据适配器,从数据库中检索数据,再填充到本地数据集中。同时,我们可以利用DataAdapter,再将数据反向从DataSet中更新回数据库。
DataAdapter使用中主要有4个命令对象比较重要。它们分别是:SelectCommand、InsertCommand、UpdateCommand、DeleteCommandSelectCommand,主要是从数据库中检索数据,InsertCommand、UpdateCommand、DeleteCommand这3个命令对象主要负责把本地数据集DataSet中的数据上传回服务器。DataAdapter的Fill方法用于使用DataAdapter的SelectCommand的结果来填充DataSet。
4、DataReader对象:是一个只向前的数据流。用于从数据源中检索只读数据集,并且必须有连接时才可以用。
5、DataSet对象:是ADO.NET的核心,相当于本地数据库,它与数据库无关的,它和远程数据库连接的桥梁就是.NET数据提供程序。它是由多个表构成,每个表都是一个DataTable对象。
DataSet中主要的对象是DataTable,每一列都是DataColumn对象每一行都是一个DataRow对象。在里面可以加入一些约束,一个是UniqueConstraint(唯一约束),一个是ForeignKeyConstraint(外键约束)。DataSet下面有两个重要的集合,一个是DataTables,一个是DataRelations.DataTables里面放置的都是DataTable对象。
三、ADO.NET实现数据库的操作。
首先需要在web.config之中配置我们的数据库连接字符串。
/// /// 读取数据库链接字符串/// private static readonly string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
下面是我写的一个数据库操作工具类:
using System;using System.Configuration;using System.Data.SqlClient;namespace entity{ /// /// 数据库操作工具类 /// public class DBTools { /// /// 读取数据库链接字符串 /// private static readonly string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString; /// /// 此方法可以做增删改 /// /// sql语句 /// sql语句中的参数 /// 返回受影响的行数,int类型 public static object SelectDeleteUpdate(string sql, params SqlParameter[] ps) { try { using (SqlConnection conn = new SqlConnection(connStr)) { using (SqlCommand com = new SqlCommand(sql, conn)) { conn.Open(); if (ps != null) { com.Parameters.AddRange(ps); } return com.ExecuteNonQuery(); } } } catch (Exception e) { return -1;//执行失败 } } /// /// 该方法用在查询上 /// /// sql语句 /// sql语句中的参数 /// 返回首行首列,object类型 public static object SelectData(string sql, params SqlParameter[] ps) { using (SqlConnection con = new SqlConnection(connStr)) { using (SqlCommand cmd = new SqlCommand(sql, con)) { con.Open(); if (ps != null) { cmd.Parameters.AddRange(ps); } return cmd.ExecuteScalar(); } } } /// /// 该方法用于查询,读数据 /// /// sql语句 /// sql语句中的参数 /// 返回sqldatareader对象,里面有数据 private static SqlDataReader ExecuteReader(string sql, params SqlParameter[] ps) { //这地方不用using,因为不知道什么时候释放 SqlConnection con = new SqlConnection(connStr); using (SqlCommand cmd = new SqlCommand(sql, con)) { if (ps != null) { cmd.Parameters.AddRange(ps); } try { con.Open(); //这个重载会datareader关闭时,自动关闭connection return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection); } catch (Exception ex) { con.Close(); con.Dispose(); throw ex; } } } }}
调用方法示例:
//新增数据string sql = "insert into [dbo].[User] values(@UserName,@ReginstTm);";SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@UserName","李二牛"), new SqlParameter("@ReginstTm",DateTime.Now.AddDays(30)), };int result = Convert.ToInt32(DBTools.SelectDeleteUpdate(sql, paras));//删除数据string sqlDelete = "delete from [dbo].[User] where UserName=@uname;";//SqlParameter para = new SqlParameter("@Id", SqlDbType.Int, 4);SqlParameter[] parasDel = new SqlParameter[] { new SqlParameter("@uname","u"), };DBTools.SelectDeleteUpdate(sqlDelete, parasDel);
至于为什么要用SqlParameter呢?因为我实在是厌烦于注重各种的数据类型,尤其是单引号,双引号等。而SqlParameter完全省去了这些不必要的环节。
四、ADO.NET面试
1.ADO.NET中读写数据库需要使用哪些对象?作用是什么?
答:Connection连接对象,Command执行命令和存储过程,DataReader向前只读的数据流,DataAdapter适配器,支持增删查询,DataSet数据级对象,相当于内存里的一张或多张表。
2.写出一条SQL语句:取出Student表中第31到第40条数据(以自动增长的ID作为主键,主键可能不连续)
答: select top 10 * from Student where id not in (select top 30 id from Student)
3.事务的四大特性分别详细说明
1)原子性
事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
2)一致性
事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。
3)隔离性
由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。
4)持久性
事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。
4.SQL Server是什么类型数据库,保证数据库的完整性都有哪些
答:关系型数据库,实体完整性,区域完整性,参展完整性
5.描述SQL Server数据库中的基本约束及其作用
(1).主键约束(Primary Key): 确定表中的标识列,(主键字段不能为空,必须唯一) 标识:确定一个对象的唯一表现
(2)外键约束(Foreign key) 确定表与表之间的联系方式,一般情况下通过从表的标识列进行确定 主表:给哪张表添加约束哪张表就是主表,辅助表为从表
(3)唯一约束(unique) 确定这个字段中的数据必须是唯一
(4)非空约束(not null) 确定这个字段中的数据必须不能为空
(5)检查约束(CHECK) 设置这个字段中的数据的特性
(6)默认约束(DF) default constraint 默认值(选中列,设置列的默认绑定值)
6.简单叙述索引、视图、触发器、事务、存储过程
答:索引提供的表中数据的逻辑位置
视图是一种虚拟表,虚拟表具有和物理表相同的功能,可以对虚拟表进行增删改查操作;
存储过程是一组编译的SQL语句
事务是指一个工作单元,它包含了一组数据操作命令,并且所有的命令作为一个整体一起向系统提交或撤消请求操作,即这组命令要么都执行,要么都不执行触发器是一种特殊类型的存储过程,触发器主要通过事件触发而被执行的,
7.列举出SQL Server中的聚合函数(至少5个)
答:SUM()、MIN()、MAX()、AVG()、count()



