【问题标题】:using session variable within sql query在 sql 查询中使用会话变量
【发布时间】:2013-03-13 23:11:27
【问题描述】:

我有一个用户登录并可以编辑他/其他人的数据的应用程序。但是,如果用户是管理员,他会获得一个网格视图,其中包含他可以编辑的所有用户记录。如果用户不是管理员,他只会得到一个列表视图,他可以在其中编辑自己的数据。

当用户登录页面时,他的用户 ID 本身也存储在数据库中,作为会话变量存储在 Session["ID"] 中。现在我需要用用户的数据填充列表视图。我认为只根据 Session["ID"] 参数查询数据会很好。但我不知道该怎么做。

编辑:

好的,我对此几乎没有代码,因为我不知道该怎么做,但我会发布我所拥有的。首先是我设置用户标识的会话变量的方法:

            objda = new SqlDataAdapter("[GetIDOfUser]", objcon);
            objda.SelectCommand.CommandType = CommandType.StoredProcedure;
            objda.SelectCommand.Parameters.Add("@Username", SqlDbType.VarChar).Value = tbUsername.Text;
            objda.SelectCommand.Parameters.Add("@UserPassword", SqlDbType.VarChar).Value = tbPassword.Text;
            String id = (string)objda.SelectCommand.ExecuteScalar();
            Session["ID"] = id;

这是我的标记:

 <asp:ListView ID="ListView1" Visible="False" runat="server" DataSourceID="SqlDataSource2"></asp:ListView>

这是我启用列表视图的代码:

protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["UserAuthentication"] == null)
            {
                Response.Redirect("Login.aspx");
            }

            if (Session["Benutzerart"].ToString() == Enums.Enumerations.Benutzer.Administrator.ToString())
            {
                GridView1.Visible = true;  

                //Set controls for admin
            }

            if (Session["Benutzerart"].ToString() != Enums.Enumerations.Benutzer.Administrator.ToString())
            {
                ListView1.Visible = true;
                //Set controls for other users
            }
        }

好吧,伙计们,我想通了:

我只是像上面的代码一样制作普通的列表视图。只有数据源在标记中没有 selectcommand 属性。此属性在代码中设置:

if (Session["Benutzerart"].ToString() != Enums.Enumerations.Benutzer.Administrator.ToString())
            {
                ListView1.Visible = true;
                SqlDataSource2.SelectCommand = "SELECT [Titel], [Bezeichnung], [Vorname], [Nachname], [Geburtsdatum], [Geburtsort], [Straße], [Nationalität], [Hausnummer], [PLZ], [Ort], [Land], [Mobil], [UrlaubstageGenommen], [UrlaubstageInsgesamt], [Status], [Benutzerart], [Homepage], [Email], [Festnetz], [Fax], [UrlaubstageRest], [Username], [UserPassword] FROM [Benutzer] WHERE [BenutzerID] = '" + Session["ID"] + "'";
            }

数据源标记:

<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ></asp:SqlDataSource>

【问题讨论】:

  • 请发布一些您拥有的代码
  • 另外,您使用的是 C# 还是 VB.Net 还是什么?
  • @LeonidasFett 向我们展示 SqlDataSource2 选择命令
  • 感谢您的评论,它给了我一个有效的想法(见编辑)。现在只显示登录用户的数据!
  • @LeonidasFett 如果您想要所有记录,只需从 SelectCommand 中删除 where 条件,如果它对您有帮助,请不要忘记标记为答案

标签: c# asp.net sql session-variables


【解决方案1】:

您正在将列表视图与 SqlDataSource 绑定,使用 sqldatasource SelectParameter

<asp:SqlDataSource ID="SqlDataSource2" runat="server" 
                                ConnectionString="<%$ ConnectionStrings:yourConnection %>" 
                                SelectCommand="SELECT * FROM yourTable WHERE userid = @userid">
                                <SelectParameters>
                                    <asp:SessionParameter Name="userid" SessionField="ID" Type="String" />
                                </SelectParameters>
                            </asp:SqlDataSource>

【讨论】:

    【解决方案2】:

    要从 DB 中选择数据,您可以创建 sql 数据源并将其绑定到 ListView:

        SqlDataSource ds = new SqlDataSource();
    
        ds.ConnectionString = yourDBconnectionString;
    
        ds.SelectCommand = "SELECT * FROM records_table WHERE user_id=@user_id";
        ds.SelectParameters.Add("user_id", Convert.ToInt32(Session["id"]));
    
        ListView1.DataSource = ds;
        ListView1.DataBind();
    

    然后将记录字段绑定到aspx页面上的ListView使用(只是一个例子):

    <%# Eval("recort_title") %>
    

    【讨论】:

      猜你喜欢
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 2018-06-29
      • 2015-07-28
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      相关资源
      最近更新 更多