阅读器关闭时read的尝试无效

这是类里的方法,执行完全没有问题的

public override SqlDataReader GetSqlDataReader(string Sql, params SqlParameter[] commandParameters)
    {
        SqlDataReader sdr = null;
        using (SqlConnection connection = GetSqlConnection())
        {
            SqlCommand command = new SqlCommand(Sql, connection);
            if (commandParameters != null)
            {
                foreach (SqlParameter parm in commandParameters)
                    command.Parameters.Add(parm);
            }
            connection.Open();
            sdr = command.ExecuteReader();
            connection.Close();
        }
        return sdr;
    }

 

而在调用该类中的此方法时却报“阅读器关闭时read的尝试无效”错误,调用方法如下:

public void setValue(string id)
        {
            try
            {
                SqlParameter[] paralist =
                    {
                    new   SqlParameter("@id", SqlDbType.Int)
                    };
                paralist[0].Value = Convert.ToInt32(id);
                string setSql = "select Air,class,discountRate,discountName,ei" +
                    ",bznotes from Classinfo where id=@id";
                sqlHelper = new sqlHelp();
                SqlDataReader sdr = null;
                sdr = sqlHelper.GetSqlDataReader(setSql, paralist);
                if (sdr != null)
                {
                    if (sdr.Read())
                    {
                        this.txtAir.Text = sdr["Air"].ToString();
                        this.txtCabin.SelectedText = sdr["class"].ToString();
                    }
                }
            }
            catch
            { }
        }

很不明白,在类中调试该方法完全没有问题,为什么在窗体中调用时去报这样的错误呢,后来看到

using (SqlConnection connection = GetSqlConnection())这句代码

而using为只要跳出了代码段就自动调用这个类实例的Dispose,因此也就释放了所有的资源,包括connection、command,所以SqlDataReader对象也就不能打开了!

注意:如果加了灰色的"connection.Open();"调用时也是会报错的.

所以最好这样:sdr = command.ExecuteReader(CommandBehavior.CloseConnection);

转载于:https://www.cnblogs.com/dongpo888/archive/2009/07/10/1520489.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值