"Ungültigen Versuch zu Lesen, wenn keine Daten vorhanden" wenn mit SQLDataReader

Hier ist mein GeneralFunctions:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;

///<summary>
///Summary description for GeneralFunctions
///</summary>
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" ) );
            }
        }
    }

}

Hier ist mein login-Seite:

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";
        }
    }
}

Bevor ich Hinzugefügt die GetDistInfo Methode, es funktioniert nur, angemeldete Benutzer. Ich habe dann versucht, hinzufügen, Session-Variablen und die GetDistInfo Methode. Ich pass in die DistID zurück von AuthenticateLogin in die GetDistInfo Methode. Es fehl mit der folgenden Fehlermeldung:

Exception Details: System.InvalidOperationException: Ungültiger Versuch zu Lesen, wenn keine Daten vorhanden sind.

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 

Wenn ich den SQL gegen die Datenbank korrekt " zieht sich zurück die Kunden Namen. Ich bin mir nicht sicher, warum Sie es nicht tut, dass der code drin. Jemand in der Lage, um zu sehen, was ich bin fehlt?

InformationsquelleAutor James Wilson | 2012-04-13

Schreibe einen Kommentar