Вот мои GeneralFunctions:«Invalid попытка чтения при отсутствии данных присутствует» при использовании SqlDataReader
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"));
}
}
}
}
Вот мой Логин страница:
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";
}
}
}
Прежде чем я добавил метод GetDistInfo он работал просто отлично, вошел в систему пользователя. Затем я попытался добавить переменные сеанса и метод GetDistInfo. Я передаю DistID, возвращенный из AuthenticateLogin, в метод GetDistInfo. Он выдает ошибку со следующей ошибкой:
Сведения об исключении: System.InvalidOperationException: Неправильная попытка чтения, когда данные отсутствуют.
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
Когда я запускаю SQL по базе данных, он правильно отбрасывает имя клиента. Я не уверен, почему он не делает этого внутри кода. Любой, кто может видеть то, что мне не хватает?
Я добавил возврат null, и это исправлено. Можете ли вы помочь мне понять, почему это искало нуль, когда чтение всегда будет возвращать результат? –
Компилятор замечает, что нет оператора возврата. Компилятор не может доказать, что путь кода никогда не уйдет, и поэтому он ожидает, чтобы он нажал оператор return. – Pankaj
вы были первыми, кто опубликовал обратное нулевое решение, и это сработало как шарм. Должен проверить это как ответ. Спасибо всем за вашу помощь и быстрые ответы. –