這裏的時候是我GeneralFunctions:「無效的嘗試時,不存在數據讀取」使用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方法。我將從AuthenticateLogin返回的DistID傳入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,並修復了它。你能幫我理解爲什麼當讀取總是返回一個結果時,這是爲了尋找一個null? – 2012-04-13 18:50:37
編譯器注意到沒有返回語句。編譯器無法證明代碼路徑永遠不會離開,所以它期望碰到返回語句。 – Pankaj 2012-04-13 18:57:05
你是第一個發佈返回null解決方案,它的工作就像一個魅力。必須檢查這個答案。謝謝大家的幫助和快速回復。 – 2012-04-13 19:10:17