ADO.NET中的(SQLConnection&SQLCommand&SQLDataReader&SQLDataAdapter等)

本文深入探讨ADO.NET对象模型,包括Connection、Command、DataReader和DataAdapter的使用与特性,解析SQLHelper代码逻辑,以及CommandType和CommandBehavior的枚举类型含义。
摘要由CSDN通过智能技术生成

目录

前言

详细介绍

机房七层解释

知识点小结(CommandType和CommandBehavior)

        1.Commandtype:

       2.CommandBehavior 

关于DataAdapter(数据适配器)    

    一、特点介绍 

   二、DataAdapter和DataReader


前言

        昨晚和小伙伴研究了一下SQLHelper中的一下代码,发现知识知道怎么运行,出什么结果,但是并不知道都是干什么的。今天上午花了半个小时有研究了一下,研究的比以前稍微懂一点了,暂时趁热做一个总结,后续再继续优化。

详细介绍

        ADO.NET对象模型最主要的四个组成部分分别是Connection(SQLConnection)、Command(SQLCommand)、DataReader(SQLDataReader),DataAdapter(SQLDataAdapter)。这几种模型在进行C#重构的时候会用到,而且非常明显的作用,此时会感觉到语言的强大性。

        我们知道,在对一些数据进行查询的时候,大概经历下面几个过程:连接数据库→访问执行命令→返回执行命令的结果并且进行处理→关闭连接

        1.首先最基本的是Connection(SqlConne);

         其中要作用就是连接数据库。我们首先需要引用命名空间System.Data.SqlClient(using System.Data.SqlClient);接着创建SQLConnection类型的实例对象SqlConnection,为其属性ConnectionString赋值连接字符串;然后调用Open()方法,这就完成了数据库的连接操作;最后记得在完成访问数据操作之后,调用Close()方法,关闭连接。

常用方法:

Open():使用COnnectionString中指定的属性设置数据库连接。

Close():关闭数据库连接。

常用属性:

ConnectionString:获取或设置用来打开SQLServer数据库的连接字符串

ConnectionTimeout:获取等待时间,即终止尝试连接操作或者返回错误信息之前的等待时间。

DataSource:获取要连接的SQL Server实例名称。

Database:获取数据库的名称。

        2.其次是command(SqlCommand)

        在成功连接数据库之后,就要对数据库进行访问操作,也就是数据的增删改查工作,SQLCommand类最基本常用的属性和方法如下所示(其他的不在这里列举,读者可自行查询)

方法:

ExecuteNonQuery():用于执行SQL语句,该方法用于不需要返回任何记录的情况(例如,INSERT,DELETE或UPDATE查询)

ExecuteReader():用于执行SQL语句并返回一组数据。

ExecuteScalar():用于执行查询,并返回查询所返回的结果集中第一行第一列的内容,其他内容将被忽略。

ExecuteXmlReader():以XmlReader 形式返回结果集。

属性:

CommandText:设置对数据源执行的文本命令

CommandTimeout:等待时间

CommandType:对CommandText属性的解释(枚举,其中包括StoredProcedure、TableDirect和Text)

Connection:数据库连接。

Parameters:Parameter对象的集合

ExecuteReader()方法

        3、DataReader(SQLDataReader)

        DataReader用于从数据源获取只读且只进的数据集。DataReader是在查询的过程中获取数据,而不是等待查询结束。

DataReader通过Command对象的ExecuteReader() 方法获得,

机房七层解释

        接下来以机房重构七层为例来大概介绍一下。

        1.我们知道D层是数据访问层,在D层都有一个SQLHelper的实例化,通过转定义(F12)我们可以发先此作用是进行数据库的连接,但是此时并没有连接成功,因为此时并没有Open()【也就是打开数据库】。

      2.接下来D层要进行的任务就是进行传参和sql语句,

        3.当参数都传完之后就要进行数据的查询,此时开始调用sqlHelper中相应的方法。

        4.在相应的方法中,我们会发现第一步工作时进行实例化一个内存表,此作用是将查询的数据存入到实例化的表中,便于读取使用。当内存表有了之后,就开始打开数据库(下图中的Getconn方法),通过sqlcommand然后开始进行查询。

comtext:是D层传过来的string SQL语句,  GetConn是调用一个打开数据库的方法。

cmd.CommandType=ct:命令对象的执行形式数text型(下面介绍一下CommandType)

        5.所有准备工作结束之后就开始执行命令,

ExecuteReader():用于执行SQL语句并返回一组数据。

commandBehavior是一个枚举(下面会介绍一下)。

dt.Load():加载定义的内存表。最后就是Return(返回表到D层);

【Using:此作用非常强大,此链接可以帮到你。 using的强大作用

知识点小结(CommandType和CommandBehavior)

        这两个都是枚举类型。

        1.Commandtype:

CommandType.Text代表执行的是SQL语句
CommandType.StoreProcedure代表执行的是存储过程【七层会常用到这两种类型】

CommandType.TableDirect:需要将CommandText属性设为要访问的表的名称,执行后返回该表的所有行和列。

 public enum CommandType
{
        //
        // 摘要:
        //     SQL 文本命令。 (默认。)
        Text = 1,
        //
        // 摘要:
        //     存储过程的名称。
        StoredProcedure = 4,
        //
        // 摘要:
        //     表的名称。
        TableDirect = 512
}

       2.CommandBehavior 

#region 程序集 System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
// C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Data.dll
#endregion

namespace System.Data
{
    //
    // 摘要:
    //     提供查询结果及其对数据库的影响的说明。
    [Flags]
    public enum CommandBehavior
    {
        //
        // 摘要:
        //     查询可能返回多个结果集。 执行查询可能会影响数据库状态。 Default 未设置 System.Data.CommandBehavior 标志,因此调用
        //     ExecuteReader(CommandBehavior.Default) 在功能上等效于调用 ExecuteReader()。
        Default = 0,
        //
        // 摘要:
        //     查询返回单个结果集。
        SingleResult = 1,
        //
        // 摘要:
        //     查询仅返回列信息。 使用 System.Data.CommandBehavior.SchemaOnly 时,用于 SQL Server 的 .NET Framework
        //     数据提供程序在要执行的语句前加上 SET FMTONLY ON。
        SchemaOnly = 2,
        //
        // 摘要:
        //     查询返回列和主键信息。
        KeyInfo = 4,
        //
        // 摘要:
        //     查询应返回结果集中的单行。 执行查询可能会影响数据库状态。 某些 .NET Framework 数据提供程序可能(但不要求)使用此信息来优化命令性能。 使用
        //     System.Data.OleDb.OleDbCommand 对象的 System.Data.OleDb.OleDbCommand.ExecuteReader
        //     方法指定 System.Data.CommandBehavior.SingleRow 时,用于 OLE DB 的 .NET Framework 数据提供程序使用
        //     OLE DB IRow 接口(如果可用)执行绑定。 否则,它使用 IRowset 接口。 如果期望 SQL 语句仅返回一行,则指定 System.Data.CommandBehavior.SingleRow
        //     也可提高应用程序性能。 执行应返回多个结果集的查询时,可指定 SingleRow。 在这种情况下,如果同时指定了多结果集 SQL 查询和单行,返回的结果仅包含第一个结果集的第一行。
        //     不返回查询的其他结果集。
        SingleRow = 8,
        //
        // 摘要:
        //     提供一种方法,以便 DataReader 处理包含带有大型二进制值的列的行。 SequentialAccess 不是加载整行,而是使 DataReader
        //     能够以数据流的加载数据。 然后可以使用 GetBytes 或 GetChars 方法来指定开始读取操作的字节位置,以及正在返回的数据的有限缓冲区大小。
        SequentialAccess = 16,
        //
        // 摘要:
        //     执行命令时,关闭关联的 DataReader 对象时,关联的 Connection 对象也会关闭。
        CloseConnection = 32
    }
}

关于DataAdapter(数据适配器)    

        数据适配器DataAdapter 用来从数据库中读取数据,并将数据填充到DataSet以及DataTable中;同时,DataSet和DataTable还可以将数据写回到数据库中,完成数据库中数据的更新。使用DataAdapter获取数据库数据的流程:连接数据库(连接数据源) —> 获取数据库中的数据 —> 使用DataAdapter填充到DataSet和DataTable中。

    一、特点介绍 

    1、表示用于填充 DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库连接。

    2、在SqlDataAdapter和DataSet之间没有直接连接。当完成SqlDataAdpater.Fill(DataSet)调用后,两个对象之间就没有连接了。

                                                     DataAdapter和DataReader的工作原理

                                                                            大神链接

   二、DataAdapter和DataReader

  DataReader是一个向前的指针,本身并不包含数据,调用一次Read()方法它就向前到下一条记录,一个DataReader必须单独占用一个打开的数据库连接!

        DataAdapter象一座桥梁,一头连起数据库表,一头连起一个DataSet或者DataTable,在把数据库中的数据填充到DataSet或DataTable后就可以“过河拆桥”,不用再连接到数据库,而可以直接从DataSet或DataTable中获取数据。

        DataReader只能读取数据库,而且所操作的表必须处于连接状态,但是要对数据库进行写操时,只能借助Command类,          DataAdapter它建立在Command对象之上,它具有Command类的一切功能,能够
将数据填充到DataSet对象中,而且不用再连接到数据库,而可以直接从DataSet或DataTable中获取数据。(因为它采用的无连接传输模式)

        使用DataReader对象可以从数据库中得到只读的、只能向前的数据流,还可以提高应用程序的性能,减少系统开销,同一时间,只有一条行记录在内存中。

        DataAdapter对象可以自动打开和自动关闭数据库连接,适配器的主要工作流程:Connection对象建立与数据源的连接,            DataAdapter对象经由Command对象返回给DataAdapter,最后将DataAdapter对象加入到DataSet对象的DataTables对象中。

另外,从数据量级来说,DataAdapter的Fill过程较慢(写内存),一般用于小型数据处理;DataReader,一般用于大型数据处理。

                                                                                    Datareader

public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct)
        {
            //实例化数据库内存中的一个表
            DataTable dt = new DataTable();
            //cmdText:查询的文本;getConn():连接数据库的方法
            cmd = new SqlCommand(cmdText, GetConn());
            //执行命令对象的执行形式,默认为Text
            cmd.CommandType = ct;
            //将参数加入到参数集中
            cmd.Parameters.AddRange(paras);
            //在执行命令时,将关联 Connection 对象已关闭时关联 DataReader 对象已关闭
            using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                //将提供的数据源中的值填充到DataTable,如果已存在,则合并
                dt.Load(sdr);
            }
            //返回表到DAL层
            return dt;
        }

                                                                              DataAdapter

        public static DataTable GetDataTable(string sql, params SqlParameter[] ps)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
                DataTable dt = new DataTable();
                adapter.SelectCommand.Parameters.AddRange(ps);
                adapter.Fill(dt);
                return dt;
            }
        }
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值