2014-10-20 39 views
1

我有一个充满用户(id,First_Name,姓,Email_Account等)的SQL DB。 Im根据名称搜索DataBase并显示链接,如果单击该链接,则会将您重定向到用户页面。c#多个Sql结果和会话值

我的问题是,当我尝试传递会话变量,所以当链接被点击,然后页面加载从会话变量加载。

因此,当我有多个搜索结果,以我这样做的方式最后的结果会话变量通过。

这是代码! :)

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.SqlClient; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace DisplayingImages 
{ 
    public partial class WebForm7 : System.Web.UI.Page 
    { 
     SqlConnection con = new SqlConnection("Data Source=MPAPASYMEON;Server=mpapasymeon;Database=LOGIN;Initial Catalog=LOGIN; User ID=nikolaossts; Password=aaa;Connect Timeout=240"); 
     string PID2; 

     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     protected void Button1_Click1(object sender, EventArgs e) 
     { 
      DataTable PassRecord = new DataTable(); 
      String str = "select First_Name,Email_Account,Surname,id from ID where (First_Name like '%'+ @search +'%') OR (Surname like '%'+ @search +'%') OR (Email_Account like '%'+ @search +'%')"; 
      SqlCommand Srch = new SqlCommand(str, con); 
      Srch.Parameters.Add("@search", SqlDbType.NVarChar).Value = TextBox1.Text; 

      if (TextBox1.Text != "") 
      { 
       con.Open(); 
       Srch.ExecuteNonQuery(); 
       SqlDataAdapter da = new SqlDataAdapter(); 
       da.SelectCommand = Srch; 
       DataTable dt = new DataTable(); 
       DataSet ds = new DataSet(); 
       da.Fill(dt); 

       DataTable Results = new DataTable; 
       PID =(int)(Session["id"]); 

       int SaveTheFirst = PID; 

       foreach (DataRow dr in dt.Rows) 
       {      
        PID2 = dr["id"].ToString(); 

        if (PID.ToString() != PID2) 
        {      
         var field = "<a href='" + Page.ResolveUrl("~/PageView.aspx?Email=" +      dr["id"].ToString()) + "'>" + (dr["First_Name"] + "").ToString() + "</a>"; 

         Session["SurnameView"] = dr["Surname"]; 
         string check1 = dr["Surname"].ToString(); 
         Session["idView"] = dr["id"]; 
         string check2 = dr["id"].ToString(); 
         Session["EmailView"] = dr["Email_Account"]; 
         string check3 = dr["Email_Account"].ToString(); 

         Response.Write(field); 

         HttpContext context = HttpContext.Current; 

         Response.Write("<br/>"); 
        } 
       } 

       con.Close(); 
      } 

      else 
      { 
       string display = " Not Valid Search Criteria!"; 
       ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + display + "');", true); 
      } 
     } 

     public string SN { get; set; } 
     public string PS { get; set; } 
     public string EM { get; set; } 
     public int PID { get; set; } 
    } 
} 

回答

1

为什么不把标识符放到每个会话中?例如,您可以映射的用户的ID或其他内容?这样,您将能够在创建会话之后将每个会话与用户相关联。否则,如果你不使用一个唯一的标识符,不符合您的业务逻辑,你将无法在会话相关联...

foreach (DataRow dr in dt.Rows) 
      { 

       PID2 = dr["id"].ToString(); 
       if (PID.ToString() != PID2) 
       { 

        var field = "<a href='" + Page.ResolveUrl("~/PageView.aspx?Email=" +      dr["id"].ToString()) + "'>" + (dr["First_Name"] + "").ToString() + "</a>"; 

        Session["SurnameView_" + PID2 ] = dr["Surname"]; 
        string check1 = dr["Surname"].ToString(); 
        Session["idView_" + PID2] = dr["id"]; 
        string check2 = dr["id"].ToString(); 
        Session["EmailView_" + PID2] = dr["Email_Account"]; 
        string check3 = dr["Email_Account"].ToString(); 



        Response.Write(field); 

        HttpContext context = HttpContext.Current; 

        Response.Write("<br/>"); 
       } 
      } 

看一看这些链接以获得更好的主意如何创建

+0

所以你告诉我,在我的程序中,我应该把Session [“XXXX”+ ID],对! – frcake 2014-10-21 05:46:58

+0

理想情况下,会话的控制将通过处理创建和删除会话的公共静态类来调用。调用例如SessionUtilities.CreateSession(Session [“XXXX”+ ID])。是的,这会为每个用户创建会话。 – Mez 2014-10-21 06:22:12

+0

嗯,我看到你可以重定向我的地方,所以我可以读取或张贴一些示例代码?谢谢 !! – frcake 2014-10-22 07:07:59

-1

我建议使用HiddenField来存储您想要传递的数据。 Session是不是真的可靠的多个实例

+0

你能在评论阐述每个用户的唯一会话“会话不是多个研究所真正可靠ances”。 – 2014-10-20 10:15:26

0

一种方式将其保存在会话

int counter = 0; 
foreach (DataRow dr in dt.Rows) 
{ 

    PID2 = dr["id"].ToString(); 
    if (PID.ToString() != PID2) 
    { 
     counter+=1; 
     //do stuff 
     Session["Email_" + counter] = dr["Surname"]; 
    } 
} 

但在这种情况下,你应该柜台添加到URL参数。

var field = "<a href='" + Page.ResolveUrl("~/PageView.aspx?Email=" + dr["id"].ToString()) + "&counter=" + counter "'>" + (dr["First_Name"] + "").ToString() + "</a>"; 

在这种情况下,当您打开页面时,您将知道需要哪个会话参数。

另一种方法是将所有的值写入Url并在此之后进行。