C# Invalid attempt to call Read when reader is closed

后端 未结 2 1394
梦谈多话
梦谈多话 2020-12-29 06:10

I am having Invalid attempt to call Read when reader is closed error when I am doing 3 tier project in C# language. What I am trying to do is retrieve address data column by

相关标签:
2条回答
  • 2020-12-29 06:20

    It doesn't work because you close the connection before returning the reader. Reader works only when the connection is open:

    result = command.ExecuteReader();
    connection.Close();
    
    return result; // here the reader is not valid
    

    Generally speaking, you should not be returning a reader to a business layer. Reader should be used only in the data access layer. It should be used and then it and the connection should be closed.

    You should rather return an object that can work after the connection is closed, e.g. a DataSet or DataTable or alternatively a collection of DTO's. For example:

    public List<Distribution> getDistributionAll()
    {
        List<Distribution> distributionAll = new List<Distribution>();
    
        using (var connection = new SqlConnection(FoodBankDB.GetConnectionString())) // get your connection string from the other class here
        {
            SqlCommand command = new SqlCommand("SELECT b.addressLineOne FROM dbo.Beneficiaries b INNER JOIN dbo.Distributions d ON d.beneficiary = b.id", connection);
            connection.Open();
            using (var dr = command.ExecuteReader())
            {
                while (dr.Read())
                {
                    string address = dr["addressLineOne"].ToString();
    
                    distributionAll.Add(new Distribution(address));
                }
            }
        }
    
        return distributionAll;
    }
    
    0 讨论(0)
  • 2020-12-29 06:23

    Previous one is a good example ... But you can also accomplish it by below code which is automatically close a connection instance when datareader.close() method called ...

    reader = Sqlcmd.ExecuteReader(CommandBehavior.CloseConnection); 
    
    0 讨论(0)
提交回复
热议问题