title: "Invalid attempt to read when no data is present" when using SQLDataReader
body: <p>Here is my GeneralFunctions:</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Web;
  using System.Configuration;
  using System.Data;
  using System.Data.SqlClient;
  
  /// &lt;summary&gt;
  /// Summary description for GeneralFunctions
  /// &lt;/summary&gt;
  public class GeneralFunctions
  {
      public GeneralFunctions ()
      {
          //
          // TODO: Add constructor logic here
          //
      }
  
      public static DataTable GetData ( string query )
      {
          SqlDataAdapter dataAdapter;
          DataTable table;
  
          try
          {
              dataAdapter = new SqlDataAdapter( query, GetConnectionString() );
              table = new DataTable();
  
              dataAdapter.Fill( table );
              return table;
          }
          catch ( Exception ex )
          {
          }
          finally
          {
              dataAdapter = null;
              table = null;
          }
  
          return table;
      }
  
      private static string GetConnectionString ()
      {
          string connectionString = ConfigurationManager.ConnectionStrings[ "CAPortalConnectionString" ].ConnectionString;
  
          return connectionString;
      }
  
      public static int? AuthenticateLogin ( string username, string password )
      {
          using ( var conn = new SqlConnection( GetConnectionString() ) )
          using ( var cmd = conn.CreateCommand() )
          {
              conn.Open();
              cmd.CommandText =
              @"SELECT 
                   DistID 
               FROM 
                   Distributor
               WHERE 
                   Username = @username 
               AND 
                   Password = @password";
              cmd.Parameters.AddWithValue( "@username", username );
              cmd.Parameters.AddWithValue( "@password", password );
              using ( var reader = cmd.ExecuteReader() )
              {
                  if ( !reader.Read() )
                  {
                      // no results found
                      return null;
                  }
                  return reader.GetInt32( reader.GetOrdinal( "DistID" ) );
              }
          }
      }
  
      public static string GetDistInfo ( int distID )
      {
          using ( var conn = new SqlConnection( GetConnectionString() ) )
          using ( var cmd = conn.CreateCommand() )
          {
              conn.Open();
              cmd.CommandText =
              @"SELECT 
                   FName + ' ' + LName AS Name
               FROM 
                   Distributor
               WHERE 
                   DistID = @distid";
              cmd.Parameters.AddWithValue( "@distid", distID );
              using ( var reader = cmd.ExecuteReader() )
              {
                  return reader.GetString( reader.GetOrdinal( "Name" ) );
              }
          }
      }
  
  }
  </code></pre>
  
  <p>Here is my login page:</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Web;
  using System.Web.UI;
  using System.Web.UI.WebControls;
  
  public partial class index : System.Web.UI.Page
  {
      protected void Page_Load ( object sender, EventArgs e )
      {
  
      }
      protected void but_login_Click ( object sender, EventArgs e )
      {
          if ( username_id.Text != "" || password.Text != "" )
          {
              // Verify the username and password match the database
              var distId = GeneralFunctions.AuthenticateLogin( username_id.Text, password.Text );
  
              if ( distId != null )
              {
                  // User is authenticated
                  var name = GeneralFunctions.GetDistInfo( (int)distId );
                  Session[ "DistName" ] = name;
                  Session[ "DistID" ] = distId;
  
                  Response.Redirect( "dashboard.aspx", false );
              }
              else
              {
                  // provide error label here username and password do not match
                  authentFailed.Text = "Username / Password did not match our records";
              }
          }
          else
          {
              // Username or Password blank error lable
              authentFailed.Text = "Please Input Username / Password";
          }
      }
  }
  </code></pre>
  
  <p>Before I added the GetDistInfo method it worked just fine, logged in the user.  I then tried to add Session variables and the GetDistInfo method.  I pass in the DistID returned from AuthenticateLogin into the GetDistInfo method.  It errors out with the following error:</p>
  
  <p>Exception Details: System.InvalidOperationException: Invalid attempt to read when no data is present.</p>
  
  <pre><code>Source Error:
  
  Line 95:             using ( var reader = cmd.ExecuteReader() )
  Line 96:             {
  Line 97:                 return reader.GetString( reader.GetOrdinal( "Name" ) );
  Line 98:             }
  Line 99:         }
  
  
  Source File: c:\inetpub\wwwroot\Base\ClientAccessPortal\App_Code\GeneralFunctions.cs    Line: 97 
  </code></pre>
  
  <p>When I run the SQL against the database it correct pulls back the clients name.  I'm not sure why it isn't doing that inside the code.  Anyone able to see what I am missing?</p>