读代码随笔(一):using语句的使用

using (SqlDataReader rdr  =  SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_SELECT_ITEMS_BY_PRODUCT, parm))  {
                
// Scroll through the results
                while (rdr.Read()) {
                    ItemInfo item 
= new ItemInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetInt32(2), rdr.GetDecimal(3), rdr.GetString(4), rdr.GetString(5), rdr.GetString(6), rdr.GetString(7));
                    
//Add each item to the arraylist
                    itemsByProduct.Add(item);
                }

            }

         public   static  SqlDataReader ExecuteReader( string  connectionString, CommandType cmdType,  string  cmdText,  params  SqlParameter[] commandParameters)  {
            SqlCommand cmd 
= new SqlCommand();
            SqlConnection conn 
= new SqlConnection(connectionString);

            
// we use a try/catch here because if the method throws an exception we want to 
            
// close the connection throw code, because no datareader will exist, hence the 
            
// commandBehaviour.CloseConnection will not work
            try {
                PrepareCommand(cmd, conn, 
null, cmdType, cmdText, commandParameters);
                SqlDataReader rdr 
= cmd.ExecuteReader(CommandBehavior.CloseConnection);
                cmd.Parameters.Clear();
                
return rdr;
            }

            
catch {
                conn.Close();
                
throw;
            }

        }
首先在using语句中初始化一个对象,并将其引用保存在一个变量中.然后在和using语句匹配的大括号内访问该变量.编译这段代码时,编译器会自动产生一个try块和一个finally块.在finally块中,编译器会产生代码将变量转型为一个IDisposable接口,并调用该接口上的Dispose方法.很明显,using语句只能用于那些实现了IDisposable接口的类型.
前面代码在using语句中初始化了一个SqlDataReader对象,该对象由ExecuteReader()方法返回得到,该方法中有这么一句 CommandBehavior.CloseConnection,在没有异常的情况下并不会关闭conn,但是当using语句执行完之后,会自动调用SqlDataReader的Dispose()方法在该方法中会关闭SqlDataReader,当SqlDataReader关闭的时候,由于 CommandBehavior.CloseConnection,相应的conn也会关闭,不会造成资源的浪费.

转载于:https://www.cnblogs.com/whzh/archive/2007/10/29/941981.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值