C# sql数据读取器在我想要使用它时变为空

C# sql数据读取器在我想要使用它时变为空,c#,C#,我真的需要你的帮助,我正在做一个学校的项目。 我使用SqlDataReader来存储我的数据,在存储数据后(在调试SqlDataReader结果视图时,我检查了它,结果视图中充满了我的数据),当我尝试使用SqlDataReader变量时,它直接将所有数据变为空?? 在到达if行之前,我的sqlreader中有所有的数据,但是当我调试if行时,它显示sqlreader是空的 class ServicesProvider { public static SqlConnection

我真的需要你的帮助,我正在做一个学校的项目。 我使用SqlDataReader来存储我的数据,在存储数据后(在调试SqlDataReader结果视图时,我检查了它,结果视图中充满了我的数据),当我尝试使用SqlDataReader变量时,它直接将所有数据变为空?? 在到达if行之前,我的sqlreader中有所有的数据,但是当我调试if行时,它显示sqlreader是空的

 class ServicesProvider
    {
     public static SqlConnection connection = new SqlConnection(myprovider);
      public static bool LogInVerification(string NickName,string Password)
        {
            SqlDataReader SqlReader;
            SqlCommand command;
            try
            {
                command = new SqlCommand("Check_LogIn", connection);
                command.CommandType = CommandType.StoredProcedure;

            SqlParameter prm=null;
            prm = new SqlParameter("@Password", SqlDbType.VarChar);
            prm.Value=NickName;
            prm.Direction=ParameterDirection.Input;
            command.Parameters.Add(prm);

            prm = new SqlParameter("@NickName", SqlDbType.VarChar);
            prm.Value=Password;
            prm.Direction=ParameterDirection.Input;
            command.Parameters.Add(prm);

            try
            {
                connection.Open();
                SqlReader = command.ExecuteReader();

                    if (SqlReader["NickName"].ToString()== "1")
                return true;;
            }
            catch (Exception ERROR)
            {
                Console.WriteLine(ERROR.Message);
            }

        }
        catch (Exception error)
        {
            Console.WriteLine(error.Message);
        }
        return false;
    }
}

此代码就是问题所在:

SqlReader = command.ExecuteReader();
if (SqlReader["NickName"].ToString()== "1")
ExecuteReader
返回时,读卡器位于第一个结果之前。您需要调用
Read
读取结果。通常是:

using (SqlDataReader reader = command.ExecuteReader())
{ 
    while (reader.Read())
    {
        // Handle the data for this row
    }
}
注:

    < LI>如果只想读取单个值,请考虑使用<代码> Excel UndoSCAR < /COD>
  • 对于每个可使用的资源(连接、命令、读取器),您应该有一个
    using
    语句
  • 局部变量通常采用camelCased(不像
    SqlReader
    那样使用PASCALCASE)
  • 使用单个静态连接是一个非常糟糕的主意。创建连接,并在每次执行数据库操作时打开它,并在完成该操作时进行处理(使用
    语句将自动执行该操作)
  • 看起来您可能正在以纯文本形式存储密码。这显然是一个巨大的安全问题

    • 此代码就是问题所在:

      SqlReader = command.ExecuteReader();
      if (SqlReader["NickName"].ToString()== "1")
      
      ExecuteReader
      返回时,读卡器位于第一个结果之前。您需要调用
      Read
      读取结果。通常是:

      using (SqlDataReader reader = command.ExecuteReader())
      { 
          while (reader.Read())
          {
              // Handle the data for this row
          }
      }
      
      注:

        < LI>如果只想读取单个值,请考虑使用<代码> Excel UndoSCAR < /COD>
      • 对于每个可使用的资源(连接、命令、读取器),您应该有一个
        using
        语句
      • 局部变量通常采用camelCased(不像
        SqlReader
        那样使用PASCALCASE)
      • 使用单个静态连接是一个非常糟糕的主意。创建连接,并在每次执行数据库操作时打开它,并在完成该操作时进行处理(使用
        语句将自动执行该操作)
      • 看起来您可能正在以纯文本形式存储密码。这显然是一个巨大的安全问题

      非常感谢你刚刚救了我(现在有效):@Mostafa Sarsour:选择上面的“勾选”标记作为答案。非常感谢你刚刚救了我(现在有效):@Mostafa Sarsour:选择上面的“勾选”标记作为答案。