日期:2014-05-17  浏览次数:20952 次

阅读器关闭时尝试调用 Read 无效,解决方法
阅读器关闭时尝试调用 Read 无效请问是怎么回事,如何解决。下面是代码

SqlDataReader odr=LogingUserName();
if(odr.read())
{
......
}
   
 public SqlDataReader LogingUserName()
  {
  try
  {
  StrSql = "select * from [WIN_ADMINISTRATOR] where [WIN_ADMIN_USERNAME]=@StrName and [WIN_ADMIN_PASSWORD]=@StrPass";
  SqlParameter Username = new SqlParameter("@StrName", SqlDbType.NVarChar, 16);
  Username.Value = Convert.ToString(username);
  SqlParameter Password = new SqlParameter("@StrPass", SqlDbType.NVarChar, 50);
  Password.Value = Convert.ToString(password);
  SqlParameter[] ArryPars = { Username, Password };
  return ExecuteReader(connString, CommandType.Text, StrSql, ArryPars);

  }

  catch
  {
  throw;
  }
   
  }
   
下面这个是类里面的
public static SqlDataReader ExecuteReader(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
  {
  SqlCommand cmd = new SqlCommand();
  try
  {
  PrepareCommand(cmd, connection, null, cmdType, cmdText, cmdParms);
  SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  cmd.Parameters.Clear();
  return rdr;
  }
  catch
  {
  connection.Close();
  throw;
  }
  }

------解决方案--------------------
探讨
odr.read()  是要在连接状态 Connection  才可以用的
如果Connection 关闭了 就读取不了了

------解决方案--------------------
C# code
public static SqlDataReader ExecuteReader(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
        {
            SqlCommand cmd = new SqlCommand();
            DataReader reader = null;
            try
            {
                PrepareCommand(cmd, connection, null, cmdType, cmdText, cmdParms);
                reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                cmd.Parameters.Clear();
                return reader;
            }
            catch (Exception e)  {   throw e;  }
            finally
            { if (reader != null) {  reader.Close();  }  }
        }

------解决方案--------------------
别用READER 你那样用要出问题
如果访问量大了 连接池就暴了。。。