我厭倦了這個錯誤。在登錄時,我正在驗證用戶,然後在會話變量中加載一些重要信息。我在IIS上託管我的應用程序,客戶端計算機通過IP地址使用應用程序。這裏是我的C#代碼...asp.net中的SqlDataReader中的IndexOutOfRange異常c#
protected void btnLogin_Click(object sender, EventArgs e)
{
Session["UserName"] = txtUserName.Text;
string DefaultYear = GetDefaultFinYear();
if (DefaultYear != string.Empty)
{
DefaultYear = "connect" + DefaultYear;
Connections.Init(DefaultYear);
SqlDataAdapter adp = new SqlDataAdapter();
SqlDataReader dr = null;
try
{
adp = new SqlDataAdapter("CheckLogin_sp", Connections.Connection[Session["UserName"].ToString()]);
adp.SelectCommand.Parameters.AddWithValue("@UserName", txtUserName.Text.Trim());
adp.SelectCommand.Parameters.AddWithValue("@Pwd", txtPassword.Text.Trim());
adp.SelectCommand.Parameters.AddWithValue("option", "Authenticate".Trim());
adp.SelectCommand.CommandType = CommandType.StoredProcedure;
if (Connections.Connection[Session["UserName"].ToString()].State == ConnectionState.Closed)
{
Connections.Connection[Session["UserName"].ToString()].Open();
}
dr = adp.SelectCommand.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
Session["Name"] = dr[0].ToString();
Session["CompanyName"] = dr[1].ToString();
Session["UserId"] = dr[2].ToString();
Session["Center"] = dr[3].ToString();
Session["ClientCode"] = dr[4].ToString();
Session["UserImage"] = dr[5].ToString();
Session["CurrentDatabase"] = dr[6].ToString();
Connections.BillReport = dr[7].ToString();
Connections.DuesReport = dr[8].ToString();
Connections.GeneralReport = dr[9].ToString();
Connections.PendingReport = dr[10].ToString();
Connections.RadiologyReport = dr[11].ToString();
Connections.HistoReport = dr[12].ToString();
}
Session["value"] = "admin";
Response.Redirect("~/Masters/home.aspx", false);
}
else
{
MessageBox.Show("Invalid Password");
txtUserName.Text = string.Empty;
}
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
finally
{
Connections.Connection[Session["UserName"].ToString()].Close();
adp.Dispose();
dr.Close();
dr.Dispose();
}
}
else
{
MessageBox.Show("Invalid UserName");
}
}
並不是每一個出現此錯誤,但有時當多臺計算機上訪問應用程序自帶的下面一行此錯誤
Session["Name"] = dr[0].ToString();
注時間: -一旦這個錯誤發生時它只在服務器計算機重新啓動時解決。
你如何認證人?會話基於身份驗證。每個經過身份驗證的用戶都有自己的會話如果多人使用相同的憑證登錄,那麼它可能會混淆會話。 – neo
對不起,我不明白。你可以看到我的代碼,我如何驗證用戶。我將用戶名和密碼發送到數據庫,如果它返回任何值,我會在會話變量中獲得信息。 –
會話是基於用戶的,但在您的情況下,您似乎無法管理會話。每個登錄的人都會替換現有的會話。這就是爲什麼多個用戶登錄導致問題。 – neo