在SQL查询中使用会话变量
本文关键字:会话 变量 SQL 查询 | 更新日期: 2023-09-27 18:03:38
我有一个应用程序,用户登录,可以编辑他/他人的数据。但是,如果用户是管理员,他将获得一个gridview,其中包含他可以编辑的所有用户记录。如果用户不是管理员,他只会得到一个listview,在那里他可以编辑自己的数据。
当用户登录到页面时,他的userid(本身也存储在数据库中)作为session ["ID"]中的会话变量存储。现在我需要用用户的数据填充listview。我认为这将是很好的查询基于会话["ID"]参数的数据。但是我不知道该怎么做。
编辑:好的,我有很少的代码关于这个,因为我不知道如何做到这一点,但我会张贴我所拥有的。首先是我设置userid会话变量的方法:
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>
这是我启用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
}
}
好了,伙计们,我明白了:
我只是在上面的代码中创建一个普通的listview。只有数据源在标记中没有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>
如果要将listview与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>
要从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") %>