Dapper读取器关闭时无效尝试调用Read

时间:2018-04-13 17:37:06

标签: c# asp.net dapper

首先,我感谢所有人 我有调用(读取日期)返回的方法(Sql Data Reader" dr") 但在数据返回后我试图使用if dr.read()并且我得到错误

  

读取器关闭时调用Read的尝试无效

public Calss DB{
public SqlDataReader ReadQuery( string query)
{
    SqlDataReader dr;

    var ConnecRepository = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString.ToString();
    using (var connection = new SqlConnection(ConnecRepository))
    {
        connection.Open();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = connection;
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = query;
        return dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    }
}
// Page
namespace HomePage
DB db = New DB();
protected void Page_Load(object sender, EventArgs e)
{
string query = query;
SqlDataReader dr = db.ReadQuery(string.Format(query, Email, Password));
}
if (dr.Read())>>>> here the problem is Invalid attempt to call Read when reader is closed
{
}
}

1 个答案:

答案 0 :(得分:2)

SqlDataReader需要有效db connection才能查看记录。在您的情况下,您将关闭活动连接并返回readar对象,然后尝试检索记录。 这就是你得到错误的原因。读者已关闭。

我建议两种方法来解决你的问题。

1.当data readar处于活动状态时,从<{p}}中读取数据

 SqlDataReader dr;

        var ConnecRepository = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString.ToString();
           using (var connection = new SqlConnection(ConnecRepository))
           {
               connection.Open();
               SqlCommand cmd = new SqlCommand();
               cmd.Connection = connection;
               cmd.CommandType = CommandType.Text;
               cmd.CommandText = query;
               dr = cmd.ExecuteReader();
          if (dr.Read()){
                 \\your logic here}
        } 

2。使用适配器填充数据集并将数据集/数据表返回到调用程序或网页。你可以找到如何使用dataapter来填充数据集的样本数量。

希望这会有所帮助。如果您需要进一步的帮助,请告诉我。很乐意帮忙!!