"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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bitte versuchen Sie, ersetzen Sie diese. Eigentlich
Read()
fehlte in deinem code.Mit folgenden
Der compiler ist zu bemerken, dass es keine return-Anweisung. Der compiler kann beweisen, dass der code Weg nie verlassen und so ist es erwartet, dass Treffer mit einer return-Anweisung.
Sie waren die ersten, die post-die Rückkehr null-Lösung und es funktionierte wie ein Charme. Muss diese Prüfung als die Antwort. Danke Euch allen für Eure Hilfe und schnelle Antworten.
InformationsquelleAutor Pankaj
Müssen Sie zuerst Lesen (Sie tun es, wenn Sie mit der reader oben im code):
BEARBEITEN
Zu reagieren, um den Fehler, den Sie haben, seit Sie definieren Ihre Funktion
alle möglichen Wege "aus der Funktion" muss etwas zurückgeben. In Ihrem Fall sollten Sie einen string zurückgeben oder vielleicht null, je nachdem, was Sie tun möchten.
Error Message: CS0161: 'GeneralFunctions.GetDistInfo(int)': not all code paths return a value
Anyideas?Überprüfen Sie bitte mein edit.
String.Empty
wird Speicher wie eine Schokolade.Lesen Sie diese stackoverflow.com/questions/6689876/...
Ich würde vorschlagen, Sie überprüfen den rest des Codes eher als eine statische, die, einmal definiert... was du sagst, macht keinen Sinn.
InformationsquelleAutor Asken