根据用户过滤SqlDataSource

时间:2012-03-21 22:41:23

标签: c# asp.net sqldatasource

我正在从我的数据库中检索数据,这可以通过将查询分配给SelectCommand来轻松完成。但是我希望根据登录用户的类型显示某些记录。我正在使用ASP.Net& C#。

<asp:SqlDataSource ID="SqlDataSourceInbox" runat="server"
    ConnectionString="<%$ ConnectionStrings:DBConnectionString %>" 
    ProviderName="<%$ ConnectionStrings:DBConnectionString.ProviderName %>" 

    SelectCommand="SELECT MESSAGE_ID, FACILITY_ID, TYPE, DEPARTMENT, STATUS, REMARKS
                   FROM INBOX ORDER BY DATE_RECIEVED"
</asp:SqlDataSource>

我试图通过它的ID访问属性来使用代码隐藏,但这似乎不起作用。有任何想法吗?或者在没有代码隐藏的情况下处理它会更好吗?

1 个答案:

答案 0 :(得分:0)

如果您使用的是Sql Server和SqlClient Provider,则可以按如下方式构建查询:

<asp:SqlDataSource ID="SqlDataSourceInbox" 
     SelectCommand="SELECT MESSAGE_ID, FACILITY_ID, TYPE, DEPARTMENT, STATUS, REMARKS
                    FROM INBOX ORDER BY DATE_RECIEVED
                    WHERE USER_NAME=@UserName"
     runat="server">
</asp:SqlDataSource>

看到我添加了WHERE子句,按假设字段“USER_NAME”(或您想要的其他字段)和参数@UserName进行过滤。

因此,在后面的代码中,您将获取已记录的用户名并添加select参数及其值:

    protected void Page_Load(object sender, EventArgs e)
    {
        string user = User.Identity.Name;
        SqlDataSourceInbox.SelectParameters.Clear();
        SqlDataSourceInbox.SelectParameters.Add("@UserName", user);
    }

我希望它有所帮助。