如何解决这个问题? “读取器关闭时无效尝试调用CheckDataIsReady”

问题描述 投票:-1回答:1

我创建了一个构造函数方法来执行sqldatareader以避免重新输入sqlconnection但是当我使用它时出错:

public SqlDataReader ExecuteCommand(string cmdText, CommandType cmdType)
{
    SqlDataReader dr = null;
    using (SqlConnection conn = new SqlConnection(ConnString))
    {
        SqlCommand cmd = conn.CreateCommand();
        cmd.CommandText = cmdText;
        cmd.CommandType = cmdType;
        try
        {
            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
                dr = cmd.ExecuteReader();
            }
        }
        catch(Exception e)
        {

        }
        finally
        {
            dr.Dispose();
            conn.Close();
        }
    }
    return dr;
}

我尝试使用它,但错误发生:

SqlDataReader dr = ExecuteCommand("Select * from EmployeeInfo where Employeeid = 2", CommandType.Text);
textBox1.Text = dr[1].ToString();

错误是:

读取器关闭时无效尝试调用CheckDataIsReady。

c# sqldatareader
1个回答
1
投票

只需考虑您的计划的步骤:

try
{
   if (conn.State != ConnectionState.Open)
   {
      conn.Open();
      dr = cmd.ExecuteReader();
   }
}

首先,你正确地打开连接并执行命令 - 一切都很好!

finally
{
   dr.Dispose();
   conn.Close();
}

接下来你的代码命中了finally块 - 你(尝试)处理读取器并关闭连接!再也没有错。接下来是你的问题:

return dr;
...
textBox1.Text = dr[1].ToString();

您返回一个封闭的阅读器,然后尝试从中读取 - 这会导致您收到的错误。恕我直言,我想到了两种可能的解决方案:

  1. 返回读者而不关闭它(检查此question
  2. 缓存reader-result并返回它(在您的情况下为文本框的字符串)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.