GetAllInactiveProfiles Method

SqlProfileProvider.GetAllInactiveProfiles Method

Retrieves user profile data for profiles in which the last activity date occurred on or before the specified date and time.

Namespace:  System.Web.Profile
Assembly:  System.Web (in System.Web.dll)

public override ProfileInfoCollection GetAllInactiveProfiles(
	ProfileAuthenticationOption authenticationOption,
	DateTime userInactiveSinceDate,
	int pageIndex,
	int pageSize,
	out int totalRecords


Type: System.Web.Profile.ProfileAuthenticationOption
One of the ProfileAuthenticationOption values, specifying whether anonymous, authenticated, or both types of profiles are returned.
Type: System.DateTime
A DateTime that identifies which user profiles are considered inactive. If the LastActivityDate of a user profile occurs on or before this date and time, the profile is considered inactive.
Type: System.Int32
The index of the page of results to return. pageIndex is zero-based.
Type: System.Int32
The size of the page of results to return.
Type: System.Int32%
When this method returns, contains an integer that identifies the total number of profiles. This parameter is passed uninitialized.

Return Value

Type: System.Web.Profile.ProfileInfoCollection
A ProfileInfoCollection containing user profile information about the inactive profiles.


pageIndex is less than zero.

- or -

pageSize is less than one.

- or -

pageIndex multiplied by pageSize is larger than MaxValue.

The GetAllInactiveProfiles method is used to retrieve profile information from the data source for unused user profiles for the application specified by the applicationName attribute in the configuration file. Use the authenticationOption parameter to specify whether you want only anonymous profiles, only authenticated profiles, or all profiles to be searched. Of the searched profiles, any profile with a LastActivityDate that occurs before the specified userInactiveSinceDate parameter value is returned.

The results returned by GetAllInactiveProfiles are constrained by the pageIndex and pageSize parameters. The pageSize parameter identifies the maximum number of ProfileInfo objects to return in the ProfileInfoCollection. The pageIndex parameter identifies which page of results to return; 0 identifies the first page. The totalRecords parameter is an out parameter that is set to the total number of inactive user profiles for the configured applicationName, based on the authenticationOption and userInactiveSinceDate parameters. For example, if there are 13 users for the configured applicationName, and the pageIndex value is 1 with a pageSize of 5, the ProfileInfoCollection returned will contain the sixth through the tenth inactive profiles. The totalRecords parameter will be set to 13.

The following code example shows an ASP.NET page that manages inactive profiles. A button is provided to delete all inactive profiles. Whether a profile is considered inactive is based on the date specified for the userInactiveSinceDate parameter.

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Profile" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
<script runat="server">

int pageSize = 5;
int totalProfiles;
int totalPages;
int currentPage = 1;

SqlProfileProvider provider;
ProfileAuthenticationOption authOption;
int inactiveDays = 120;
int deletedProfiles = 0;

public void Page_Load()
  DeletedMessage.Text = "";

  provider = (SqlProfileProvider)Profile.Providers["SqlProvider"];

  authOption = GetAuthenticationOption();

  if (!IsPostBack)
    InactiveDaysTextBox.Text = inactiveDays.ToString();

    inactiveDays = Convert.ToInt32(InactiveDaysTextBox.Text);

public void ProfileGrid_Delete(object sender, GridViewCommandEventArgs args)
  // Retrieve user name selected.

  int index = Convert.ToInt32(args.CommandArgument);

  string username = ProfileGrid.Rows[index].Cells[0].Text;

  provider.DeleteProfiles(new string[] {username});

  DeletedMessage.Text = "1 profile deleted.";

  // Refresh profile list.

  currentPage = Convert.ToInt32(CurrentPageLabel.Text);

private void GetProfiles()
  ProfileGrid.DataSource = provider.GetAllInactiveProfiles(authOption,
                             DateTime.Now.Subtract(new TimeSpan(inactiveDays, 0, 0, 0)),
                             currentPage - 1, pageSize, out totalProfiles);

  TotalProfilesLabel.Text = totalProfiles.ToString();

  totalPages = ((totalProfiles - 1) / pageSize) + 1;

  // Ensure that we do not navigate past the last page of Profiles.

  if (currentPage > totalPages)
    currentPage = totalPages;

  CurrentPageLabel.Text = currentPage.ToString();
  TotalPagesLabel.Text = totalPages.ToString();

  if (currentPage == totalPages)
    NextButton.Visible = false;
    NextButton.Visible = true;

  if (currentPage == 1)
    PreviousButton.Visible = false;
    PreviousButton.Visible = true;

  if (totalProfiles <= 0)
    NavigationPanel.Visible = false;
    NavigationPanel.Visible = true;

public void NextButton_OnClick(object sender, EventArgs args)
  currentPage = Convert.ToInt32(CurrentPageLabel.Text);

public void PreviousButton_OnClick(object sender, EventArgs args)
  currentPage = Convert.ToInt32(CurrentPageLabel.Text);

public void ModifyInactiveDaysButton_OnClick(object sender, EventArgs args)

public void AuthenticationOptionListBox_OnSelectedIndexChanged(object sender, EventArgs args)
  authOption = GetAuthenticationOption();

private ProfileAuthenticationOption GetAuthenticationOption()
  if (AuthenticationOptionListBox.SelectedItem != null)
    switch (AuthenticationOptionListBox.SelectedItem.Value)
      case "Anonymous":
        return ProfileAuthenticationOption.Anonymous;
      case "Authenticated":
        return ProfileAuthenticationOption.Authenticated;
        return ProfileAuthenticationOption.All;

  return ProfileAuthenticationOption.All;

public void DeleteAllInactiveButton_OnClick(object sender, EventArgs args)
  deletedProfiles = provider.DeleteInactiveProfiles(authOption, 
                      DateTime.Now.Subtract(new TimeSpan(inactiveDays, 0, 0 ,0)));
  DeletedMessage.Text = deletedProfiles.ToString() + " profiles deleted.";

<html xmlns="" >
<title>Sample: Find Profiles</title>

<form id="form1" runat="server">
  <h3>Profile List</h3>

  <table border="0" cellpadding="3" cellspacing="3">
      <td valign="top">Authentication Option</td>
      <td valign="top"><asp:ListBox id="AuthenticationOptionListBox" rows="3" runat="Server"
                         <asp:ListItem value="All" selected="True">All</asp:ListItem>
                         <asp:ListItem value="Authenticated">Authenticated</asp:ListItem>
                         <asp:ListItem value="Anonymous">Anonymous</asp:ListItem>
      <td valign="top" style="width:160">
        Number of Days for Profile to be considered "inactive"</td>
      <td valign="top" style="width:200">
        <asp:TextBox id="InactiveDaysTextBox" runat="Server" MaxLength="3" Columns="3" />
        <asp:Button id="ModifyInactiveDaysButton" runat="server" Text="Refresh Results" 
           OnClick="ModifyInactiveDaysButton_OnClick" /><br />
        <asp:Button id="DeleteAllInactiveButton" runat="Server"
           Text="Delete All Inactive Profiles" OnClick="DeleteAllInactiveButton_OnClick" />
      <td valign="top">
        <asp:RequiredFieldValidator id="InactiveDaysRequiredValidator" runat="server"
           ControlToValidate="InactiveDaysTextBox" ForeColor="red"
           Display="Static" ErrorMessage="Required" />
        <asp:RegularExpressionValidator id="InactiveDaysValidator" runat="server"
           ControlToValidate="InactiveDaysTextBox" ForeColor="red"
           Display="Static" ValidationExpression="[0-9]*" 
           ErrorMessage="Inactive Days must be a whole number less than 1000 (e.g. 30, 120)" />
      <td><asp:Label id="DeletedMessage" runat="server" /></td>
      <td><asp:Label id="TotalProfilesLabel" runat="server" /> inactive profiles found.</td>

    <asp:Panel id="NavigationPanel" Visible="false" runat="server">
    <table border="0" cellpadding="3" cellspacing="3">
        <td style="width:100">Page <asp:Label id="CurrentPageLabel" runat="server" />
            of <asp:Label id="TotalPagesLabel" runat="server" /></td>
        <td style="width:60"><asp:LinkButton id="PreviousButton" Text="< Prev"
                            OnClick="PreviousButton_OnClick" runat="server" /></td>
        <td style="width:60"><asp:LinkButton id="NextButton" Text="Next >"
                            OnClick="NextButton_OnClick" runat="server" /></td>

  <asp:GridView id="ProfileGrid" runat="server" AutoGenerateColumns="false"
                CellPadding="2" CellSpacing="1" Gridlines="None">
    <HeaderStyle BackColor="darkblue" ForeColor="white" />
      <asp:BoundField HeaderText="User Name" DataField="Username" />
      <asp:BoundField HeaderText="Is Anonymous" DataField="IsAnonymous" />
      <asp:BoundField HeaderText="Last Updated" DataField="LastUpdatedDate" />
      <asp:BoundField HeaderText="Last Activity" DataField="LastActivityDate" />
      <asp:ButtonField HeaderText="Action" Text="Delete" ButtonType="Link" />



.NET Framework

Supported in: 4, 3.5, 3.0, 2.0

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Community Additions

© 2015 Microsoft