ADO.NET(三) 连接池、Command、DataReader

本文详细介绍了ADO.NET中的连接池机制,强调其优化数据库连接的重要性。此外,讨论了Command类在执行SQL语句,特别是DML操作中的应用,并展示了如何设置命令类型和文本。接着,文章阐述了DataReader的使用,它以只进、只读的方式逐行读取查询结果,通过示例代码演示了如何操作DataReader,并提到在存在多个结果集的情况下如何遍历。
摘要由CSDN通过智能技术生成

一、连接池

虽然请求链接耗时很短,但是确实是需要时间的。一般使用连接池来优化,链接池保持已经打开的数据库链接,这些链接使用相同数据源之间的会话共享。这样就省下了不断

创建和销毁链接的时间了。ADO.NET中连接池对开发者完全透明,数据访问代码不需要做任何修改,当客户端调用Open()方法请求打开链接时,如果连接池中有此链接,链接直接从连接池中取而不是再次创建。当客户端调用Close()或者Dispose()方法时,并没有真正销毁链接,而是将链接放在链接池中,等待下次调用。

ADO.NET本身并不包含任何连接池的机制,不过大部分的提供程序都实现了各自高效的连接池算法。这些算法由托管代码实现。

我们一般用的SQL Server和Oracle都是自动使用连接池。我们可以配置一些连接池的属性。


如你可以这样配置:

<connectionStrings>
    <add name="MyTest" connectionString="DATA SOURCE=orcl;PERSIST SECURITY INFO=True;USER ID=sa;PASSWORD=sa;Max Pool Size=100" />
  </connectionStrings>
二、Command和DataReader

Command类可以执行所有类型的SQL语句,虽然它可以执行DDL但是我们一般只用它来执行DML

使用命令前我们可以选择命令类型,设置命令文本并把命令绑定到链接上,可以通过设定相应的属性(CommandType   CommandType 和Connection)来

设置这一切。或者把他们作为构造函数的额参数传递

命令可以是一条sql语句、一个存储过程或者某个表的名字,这依赖于你正在使用的命令类型。


Command提供3个常用的方法来执行命令


DataReader 允许你以只进、只读流的方式每次读取一条select语句命令返回的记录。下面是它提供的一些方法


下面一个简单的demo来介绍如何使用DataReader

首先配置链接字符串:

  <connectionStrings>
    <add name="MyTest" connectionString="DATA SOURCE=orcl;PERSIST SECURITY INFO=True;USER ID=sa;PASSWORD=sa" />
  </connectionStrings>

我用的oracle,服务器在本机,简单的在web.config配置下connectionStrings

然后后台:

 private string strConn = null;
        private OracleConnection o_Conn = null;
        private OracleCommand o_Comm = null;
        private OracleDataReader o_Reader = null;
        private string sql = null;

        public DbTest() 
        {
            strConn = ConfigurationManager.ConnectionStrings["MyTest"].ConnectionString;
            o_Conn = new OracleConnection(strConn);
        }

        public OracleConnection GetConn { get{ return this.o_Conn; } }

        /// <summary>
        /// 简单测试
        /// </summary>
        /// <returns></returns>
        public OracleDataReader GetReader() 
        {
            try 
            {
                sql = "select * from dept";                
                o_Comm = new OracleCommand(sql, o_Conn);//这里也可以分开写
                o_Comm.CommandType = CommandType.Text;//这个是默认可以不用设置
                o_Conn.Open();
                o_Reader = o_Comm.ExecuteReader();
            }
            catch (Exception ex)
            {
                o_Reader = null;
            }           
            return o_Reader;
        }
然后就是在页面上调用显示,处理DataReader的地方一定要加上try..catch

 if (!IsPostBack) 
            {
                 DbTest o_Dt=null;
                try
                {
                    o_Dt= new DbTest();
                    StringBuilder sb = new StringBuilder("<br>");
                    OracleDataReader _reader = o_Dt.GetReader();
                    while (_reader.Read())
                    {
                        sb.Append("部门编号:" + _reader["DEPTNO"] + ",部门名称:" + _reader["DNAME"] + "<br>");
                    }
                    Response.Write(sb.ToString());
                }
                catch (Exception ex)
                {
                    Response.Write(ex.Message);
                }
                finally 
                {
                    o_Dt.GetConn.Close();
                }
            }

最后得到结果

我们还可以将DataReader直接绑定到GridView上

   grd1.DataSource = _reader;
   grd1.DataBind();
结果如图


当然DataReader 不止能返回一个结果集,它有可能执行存储过程或者是用分号隔开的多个查询语句,这时但会多个结果集可以用NextReader()方法加上Read()方法遍历所有

结果集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值