- Connection:
- Command:
- DataAdapter:
- DataSet:
- DataReader:
ADO.NET中的五个主要对象:Connection、Command、DataAdapter DataSet、DataReader详细介绍与应用,感兴趣的朋友可以参考下
| 对象名 | 简述 |
|---|---|
| Connection: | 数据库交互必不可少的步骤。用于建立到数据源的连接 |
| Command: | 对数据库发出指令操作,例如对数据库下达查询、新增、修改、删除数据等指令,以及呼叫存在数据库中的预存程序等。这个对象是架构在Connection 对象上,也就是Command 对象是通过Connection连结到数据源的。 |
| DataAdapter: | 主要是在数据源以及DataSet 之间执行数据传输的工作,它可以透过Command 对象下达命令后,并将取得的数据放入DataSet 对象中。这个对象是架构在Command对象上,并提供了许多配合DataSet 使用的功能。 |
| DataSet: | 这个对象可以视为一个暂存区(Cache),可以把从数据库中所查询到的数据保留起来,甚至可以将整个数据库显示出来。DataSet 的能力不只是可以储存多个Table 而已,还可以透过DataAdapter对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。DataSet 对象可以说是ADO.NET 中重量级的对象,这个对象架构在DataAdapter对象上,本身不具备和数据源沟通的能力;也就是说我们是将DataAdapter对象当做DataSet 对象以及数据源间传输数据的桥梁。 |
| DataReader: | 当我们只需要循序的读取数据而不需要其它操作时,可以使用DataReader 对象。DataReader对象只是一次一笔向下循序的读取数据源中的数据,而且这些数据是只读的,并不允许作其它的操作。因为DataReader 在读取数据的时候限制了每次只读取一笔,而且只能只读,所以使用起来不但节省资源而且效率很好。使用DataReader 对象除了效率较好之外,因为不用把数据全部传回,故可以降低网络的负载。ADO.NET 使用Connection 对象来连接数据库,使用Command 或DataAdapter对象来执行SQL语句,并将执行的结果返回给DataReader 或 DataAdapter ,然后再使用取得的DataReader 或DataAdapter 对象操作数据结果。 |
重要属性:
- ConnectionString 属性,连接字符串,可以通过ConnectionStringBuilder去生成,也可以通过配置文件来配置信息:
- State 属性,表示 SqlConnection 的状态。为ConnectionState的枚举值,常用包括:
- Closed:连接已关闭。
- Open:连接处于打开状态。
SqlConnection connection;
public SqlHelper()
{
connection = new SqlConnection(ConnectString());
}
//获取连接字符串
private string ConnectionString(){
return ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString;
}
//打开连接
private SqlConnection GetConnection(){
if (connection.State == ConnectionState.Closed)
{
connection.Open();
}
return connection;
}
//关闭连接
public void CloseConnection()
{
if (connection.State == ConnectionState.Open)
{
connection.Close();
}
}
重要方法:
- Open() 方法,使用由 ConnectionString 指定的属性设置打开一个数据库连接。
- Close() 方法,关闭与数据库之间的连接。 此方法是关闭任何打开连接的首选方法。
- Dispose() 方法,执行与释放或重置非托管资源关联的应用程序定义的任务。
重要属性:
- Connection ,获取或设置 SqlCommand 的此实例使用的 SqlConnection。
- CommandText,获取或设置要在数据源中执行的 Transact-SQL 语句、表名或存储过程。
- Parameters,获取 SqlParameterCollection,用于传递参数对象。
- Transaction,获取或设置要在其中执行 SqlTransaction 的 SqlCommand。
重要方法:
- ExecuteNonQuery(),对连接执行 增删改的Transact-SQL 语句并返回受影响的行数。
- ExecuteReader(),将 CommandText 发送到 Connection,并生成 SqlDataReader对象返回。
- ExecuteScalar(),执行查询,并返回查询所返回的结果集中第一行的第一列。 忽略其他列或行。
- Dispose(),执行与释放或重置非托管资源关联的应用程序定义的任务。
重要事件:
- Disposed,在通过调用 Dispose() 方法释放组件时发生。
///DataAdapter:/// 执行带参数的增删改SQL语句或存储过程 /// /// 增删改SQL语句或存储过程名字 /// 命令类型 /// 参数列表 ///public int ExecuteNonQuery(string cmdText, CommandType ct, SqlParameter[] paras) { int res; using (cmd = new SqlCommand(cmdText, GetConnection())) { cmd.CommandType = ct; cmd.Parameters.AddRange(paras); res = cmd.ExecuteNonQuery(); } CloseConnection(); return res; }
重要属性:
- SelectCommand,获取或设置一个 Transact-SQL 语句或存储过程,用于在数据源中选择记录。
- InsertCommand,获取或设置一个 Transact-SQL 语句或存储过程,以在数据源中插入新记录。
- UpdateCommand,获取或设置一个 Transact-SQL 语句或存储过程,用于更新数据源中的记录。
- DeleteCommand,获取或设置一个 Transact-SQL 语句或存储过程,以从数据集删除记录。
示例代码:
public static SqlDataAdapter CreateCustomerAdapter(
SqlConnection connection)
{
SqlDataAdapter adapter = new SqlDataAdapter();
// 创建 SelectCommand.
SqlCommand command = new SqlCommand("SELECT * FROM Customers " +
"WHERe Country = @Country AND City = @City", connection);
// 添加参数到 SelectCommand.
command.Parameters.Add("@Country", SqlDbType.NVarChar, 15);
command.Parameters.Add("@City", SqlDbType.NVarChar, 15);
adapter.SelectCommand = command;
// 创建 InsertCommand.
command = new SqlCommand(
"INSERT INTO Customers (CustomerID, CompanyName) " +
"VALUES (@CustomerID, @CompanyName)", connection);
// 添加参数到 InsertCommand.
command.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");
command.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 40, "CompanyName");
adapter.InsertCommand = command;
// 创建 UpdateCommand.
command = new SqlCommand(
"UPDATE Customers SET CustomerID = @CustomerID, CompanyName = @CompanyName " +
"WHERe CustomerID = @oldCustomerID", connection);
// 添加参数到 UpdateCommand.
command.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");
command.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 40, "CompanyName");
SqlParameter parameter = command.Parameters.Add(
"@oldCustomerID", SqlDbType.NChar, 5, "CustomerID");
parameter.SourceVersion = DataRowVersion.Original;
adapter.UpdateCommand = command;
// 创建 DeleteCommand.
command = new SqlCommand(
"DELETE FROM Customers WHERe CustomerID = @CustomerID", connection);
// 添加参数到 DeleteCommand.
parameter = command.Parameters.Add(
"@CustomerID", SqlDbType.NChar, 5, "CustomerID");
parameter.SourceVersion = DataRowVersion.Original;
adapter.DeleteCommand = command;
return adapter;
}
////// 执行带参数的查询SQL语句或存储过程 /// /// 查询SQL语句或存储过程名字 /// 命令类型 /// 参数集合 ///返回DataSet结果集 public DataSet ExecuteQuery(string cmdText, CommandType ct, SqlParameter[] paras) { cmd = new SqlCommand(cmdText, GetConnection()); cmd.CommandType = ct; cmd.Parameters.AddRange(paras); SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds); CloseConnection(); return ds; }
重要方法:
- Fill方法,填充数据集。通常会向DataSet中填充。
- Update方法,更新数据源。
- DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合。也就是说,即使断开数据链路,或者关闭数据库,DataSet依然是可用的。
- 创建和刷新 DataSet 并依次更新原始数据的步骤:
- 通过 DataAdapter 使用数据源中的数据生成和填充 DataSet 中的每个 DataTable。
- 通过添加、更新或删除 DataRow 对象更改单个 DataTable 对象中的数据。
- 调用 DataAdapter 的 Update 方法,并将第二个 DataSet 作为参数传递。
- DataSet所有数据都加载在内存上执行的,可以提高数据访问速度,提高硬盘数据的安全性,极大的改善了程序运行的速度和稳定性。
- 每一个DataSet对象是由若干个 DataTable对象组成。
- DataSet使用方法:
- 把数据库中的数据通过DataAdapter对象填充DataSet。
- 通过DataAdapter对象操作DataSet实现更新数据库。
- DataSet对象的三大特性
- 独立性。DataSet独立于各种数据源。
- 离线(断开)和连接。
- DataSet对象是一个可以用XML形式表示的数据视图,是一种数据关系视图。
若要创建 SqlDataReader ,必须调用 SqlCommand 对象的 ExecuteReader 方法,而不是直接使用构造函数。
在使用SqlDataReader时,关联的SqlConnection正忙于为SqlDataReader提供服务,除了关闭它之外,不能在SqlConnection上执行其他操作。直到调用SqlDataReader的Close方法之前都是这样。例如,只有在调用Close之后才能检索输出参数
重要属性:
- Connection,获取与 SqlConnection 关联的 SqlDataReader。
- FieldCount,获取当前行中的列数。
- HasRows,获取一个值,该值指示 SqlDataReader 是否包含一行还是多行。
- IsClosed,检索一个布尔值,该值指示是否已关闭指定的 SqlDataReader 实例。
- Item[Int32],在给定列序号的情况下,获取指定列的以本机格式表示的值。
- Item[String],在给定列名称的情况下,获取指定列的以本机格式表示的值。
重要方法:
- Close(),关闭 SqlDataReader 对象。
- Dispose(),释放 DbDataReader 类的当前实例所使用的所有资源。
- Read(),让 SqlDataReader 前进到下一条记录。
////// 执行带参数的查询SQL语句或存储过程 /// /// 查询SQL语句或存储过程名字 /// 命令类型 /// 参数集合 ///返回DataReader结果集 public SqlDataReader ExecuteReader(string cmdText, CommandType ct, SqlParameter[] paras) { cmd = new SqlCommand(cmdText, GetConnection()); cmd.CommandType = ct; cmd.Parameters.AddRange(paras); try { reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear(); return reader; } catch { connection.Close(); throw; } }



