ADO.NET的五个主要对象

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 对象操作数据结果。

Connection:

重要属性:

  • ConnectionString 属性,连接字符串,可以通过ConnectionStringBuilder去生成,也可以通过配置文件来配置信息:
<add name="ConStr" connectionString="Data Source=实例名;Initial Catalog=DBName;User ID=****;Password=******" providerName="System.Data.SqlClient" />

  • 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() 方法,执行与释放或重置非托管资源关联的应用程序定义的任务。

Command:

重要属性:

  • Connection ,获取或设置 SqlCommand 的此实例使用的 SqlConnection。
  • CommandText,获取或设置要在数据源中执行的 Transact-SQL 语句、表名或存储过程。
  • Parameters,获取 SqlParameterCollection,用于传递参数对象。
  • Transaction,获取或设置要在其中执行 SqlTransaction 的 SqlCommand。

重要方法:

  • ExecuteNonQuery(),对连接执行 增删改的Transact-SQL 语句并返回受影响的行数。
  • ExecuteReader(),将 CommandText 发送到 Connection,并生成 SqlDataReader对象返回。
  • ExecuteScalar(),执行查询,并返回查询所返回的结果集中第一行的第一列。 忽略其他列或行。
  • Dispose(),执行与释放或重置非托管资源关联的应用程序定义的任务。

重要事件:

  • Disposed,在通过调用 Dispose() 方法释放组件时发生。
/// <summary>
///  执行带参数的增删改SQL语句或存储过程
/// </summary>
/// <param name="cmdText">增删改SQL语句或存储过程名字</param>
/// <param name="ct">命令类型</param>
/// <param name="paras">参数列表</param>
/// <returns></returns>
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;
}

DataAdapter:

重要属性:

  • 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;
}
/// <summary>
///  执行带参数的查询SQL语句或存储过程
/// </summary>
/// <param name="cmdText">查询SQL语句或存储过程名字</param>
/// <param name="ct">命令类型</param>
/// <param name="paras">参数集合</param>
/// <returns>返回DataSet结果集</returns>
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:

  1. DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合。也就是说,即使断开数据链路,或者关闭数据库,DataSet依然是可用的。
  2. 创建和刷新 DataSet 并依次更新原始数据的步骤:
    • 通过 DataAdapter 使用数据源中的数据生成和填充 DataSet 中的每个 DataTable。
    • 通过添加、更新或删除 DataRow 对象更改单个 DataTable 对象中的数据。
    • 调用 DataAdapter 的 Update 方法,并将第二个 DataSet 作为参数传递。
  3. DataSet所有数据都加载在内存上执行的,可以提高数据访问速度,提高硬盘数据的安全性,极大的改善了程序运行的速度和稳定性。
  4. 每一个DataSet对象是由若干个 DataTable对象组成。
  5. DataSet使用方法:
    • 把数据库中的数据通过DataAdapter对象填充DataSet。
    • 通过DataAdapter对象操作DataSet实现更新数据库。
  6. DataSet对象的三大特性
    • 独立性。DataSet独立于各种数据源。
    • 离线(断开)和连接。
    • DataSet对象是一个可以用XML形式表示的数据视图,是一种数据关系视图。

DataReader:

若要创建 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 前进到下一条记录。
/// <summary>
/// 执行带参数的查询SQL语句或存储过程
/// </summary>
/// <param name="cmdText">查询SQL语句或存储过程名字</param>
/// <param name="ct">命令类型</param>
/// <param name="paras">参数集合</param>
/// <returns>返回DataReader结果集</returns>
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;
	}
}
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值