Фильтрация SqlDataSource на основе пользователя

Я извлекаю данные из своей базы данных, что легко сделать, назначив запрос SelectCommand. Однако я хочу отображать определенные записи в зависимости от типа пользователя, вошедшего в систему. Я использую ASP.Net и С#.

<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>

Я попытался использовать код программной части, получив доступ к свойствам через его идентификатор, но это, похоже, не работает. Любые идеи? или было бы лучше справиться с этим без кода программной части?


person user1165687    schedule 21.03.2012    source источник
comment
как вы определяете тип пользователя?   -  person Sinaesthetic    schedule 22.03.2012
comment
Я определяю тип пользователя по его идентификатору объекта.   -  person user1165687    schedule 22.03.2012


Ответы (1)


Если вы используете сервер Sql и поставщик SqlClient, вы можете построить запрос следующим образом:

<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);
    }

Я надеюсь, что это помогает.

person outlookrperson    schedule 22.03.2012
comment
Это выглядит хорошо, как я и думал, но, как ни странно, в моем файле кода программной части он не распознает ID=SqlDataSourceInbox. Как правило, у меня должен быть доступ к этому в коде программной части, верно? Возможно, мне нужно посмотреть, почему не известно. Я ценю помощь. - person user1165687; 22.03.2012
comment
Идентификатор SqlDataSource ДОЛЖЕН быть доступен в коде как переменная экземпляра. В этом случае, если вы определяете ‹asp:SqlDataSource ID=SqlDataSourceInbox ... ›, предполагается, что возможен доступ к этой переменной экземпляра. Попробуйте добавить на страницу другие элементы управления и получить доступ к ее свойствам в отделенном коде. - person outlookrperson; 22.03.2012