SqlProfileProvider.DeleteProfiles SqlProfileProvider.DeleteProfiles SqlProfileProvider.DeleteProfiles SqlProfileProvider.DeleteProfiles Method

定义

从数据源中删除配置文件属性和信息。Deletes profile properties and information from the data source.

重载

DeleteProfiles(String[]) DeleteProfiles(String[]) DeleteProfiles(String[]) DeleteProfiles(String[])

从数据源中删除提供的一系列用户名的配置文件属性和信息。Deletes profile properties and information from the data source for the supplied list of user names.

DeleteProfiles(ProfileInfoCollection) DeleteProfiles(ProfileInfoCollection) DeleteProfiles(ProfileInfoCollection) DeleteProfiles(ProfileInfoCollection)

从数据源中删除提供的一系列配置文件的配置文件属性和信息。Deletes profile properties and information for the supplied list of profiles from the data source.

DeleteProfiles(String[]) DeleteProfiles(String[]) DeleteProfiles(String[]) DeleteProfiles(String[])

从数据源中删除提供的一系列用户名的配置文件属性和信息。Deletes profile properties and information from the data source for the supplied list of user names.

public:
 override int DeleteProfiles(cli::array <System::String ^> ^ usernames);
public override int DeleteProfiles (string[] usernames);
override this.DeleteProfiles : string[] -> int
Public Overrides Function DeleteProfiles (usernames As String()) As Integer

参数

usernames
String[]

要删除的配置文件的用户名字符串数组。A string array of user names for profiles to be deleted.

返回

从数据源中删除的配置文件的数目。The number of profiles deleted from the data source.

异常

usernames 的长度为零。The length of usernames is zero.

-or- usernames 中的一个项目为空字符串 ("")、长度超过 256 个字符或包含逗号。One of the items in usernames is an empty string (""), exceeds a length of 256 characters, or contains a comma.

-or- usernames 中的两个或更多个项目具有相同的值。Two or more items in usernames have the same value.

usernamesnullusernames is null.

-or- usernames 中的一个项目为 nullOne of the items in usernames is null.

示例

下面的代码示例演示了管理不活动配置文件的 ASP.NET 页。The following code example shows an ASP.NET page that manages inactive profiles. GridView控件显示返回的不活动配置文件。A GridView control displays the inactive profiles returned. GridView控件的每一行都包含一个按钮,该按钮通过调用DeleteProfiles方法从数据源中删除该行的配置文件。Each row of the GridView control includes a button that deletes the profile for that row from the data source with a call to the DeleteProfiles method.

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Profile" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<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();

    GetProfiles();
  }
  else
  {
    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);
  GetProfiles();
}


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;
    GetProfiles();
    return;
  }

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

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

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

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

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

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

public void ModifyInactiveDaysButton_OnClick(object sender, EventArgs args)
{
  GetProfiles();
}

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

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

  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.";
  GetProfiles();
}

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Sample: Find Profiles</title>
</head>
<body>

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

  <table border="0" cellpadding="3" cellspacing="3">
    <tr>
      <td valign="top">Authentication Option</td>
      <td valign="top"><asp:ListBox id="AuthenticationOptionListBox" rows="3" runat="Server"
                                    AutoPostBack="true"
                                    OnSelectedIndexChanged="AuthenticationOptionListBox_OnSelectedIndexChanged">
                         <asp:ListItem value="All" selected="True">All</asp:ListItem>
                         <asp:ListItem value="Authenticated">Authenticated</asp:ListItem>
                         <asp:ListItem value="Anonymous">Anonymous</asp:ListItem>
                       </asp:ListBox>
      </td>
    </tr>
    <tr>
      <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>
      <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>
    </tr>
    <tr>
      <td><asp:Label id="DeletedMessage" runat="server" /></td>
      <td><asp:Label id="TotalProfilesLabel" runat="server" /> inactive profiles found.</td>
    </tr>
  </table>

    <asp:Panel id="NavigationPanel" Visible="false" runat="server">
    <table border="0" cellpadding="3" cellspacing="3">
      <tr>
        <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>
      </tr>
    </table>
  </asp:Panel>

  <asp:GridView id="ProfileGrid" runat="server" AutoGenerateColumns="false"
                OnRowCommand="ProfileGrid_Delete"
                CellPadding="2" CellSpacing="1" Gridlines="None">
    <HeaderStyle BackColor="darkblue" ForeColor="white" />
    <Columns>
      <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" />
    </Columns>
  </asp:GridView>

</form>

</body>
</html>
<%@ Page Language="VB" %>
<%@ Import Namespace="System.Web.Profile" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

Dim pageSize As Integer = 5
Dim totalProfiles As Integer 
Dim totalPages As Integer
Dim currentPage As Integer = 1

Dim provider As SqlProfileProvider
Dim authOption As ProfileAuthenticationOption
Dim inactiveDays As Integer = 120
Dim deletedProfiles As Integer = 0

Public Sub Page_Load()

  DeletedMessage.Text = ""

  provider = CType(Profile.Providers("SqlProvider"), SqlProfileProvider)

  authOption = GetAuthenticationOption()

  If Not IsPostBack Then  
    InactiveDaysTextBox.Text = inactiveDays.ToString()

    GetProfiles()
  Else
    inactiveDays = Convert.ToInt32(InactiveDaysTextBox.Text)
  End If
End Sub

Public Sub ProfileGrid_Delete(sender As Object, args As GridViewCommandEventArgs)
  ' Retrieve user name selected.

  Dim index As Integer = Convert.ToInt32(args.CommandArgument)

  Dim username As String = ProfileGrid.Rows(index).Cells(0).Text

  provider.DeleteProfiles(New string() {username})

  DeletedMessage.Text = "1 profile deleted."

  ' Refresh profile list.

  currentPage = Convert.ToInt32(CurrentPageLabel.Text)
  GetProfiles()
End Sub


Private Sub GetProfiles()
  ProfileGrid.DataSource = provider.GetAllInactiveProfiles(authOption, _
                             DateTime.Now.Subtract(New TimeSpan(inactiveDays, 0, 0, 0)), _
                             currentPage - 1, pageSize, 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 Then  
    currentPage = totalPages
    GetProfiles()
    Return
  End If

  ProfileGrid.DataBind()
  CurrentPageLabel.Text = currentPage.ToString()
  TotalPagesLabel.Text = totalPages.ToString()

  If currentPage = totalPages Then
    NextButton.Visible = False
  Else
    NextButton.Visible = True
  End If

  If currentPage = 1 Then
    PreviousButton.Visible = False
  Else
    PreviousButton.Visible = True
  End If

  If totalProfiles <= 0 Then
    NavigationPanel.Visible = False
  Else
    NavigationPanel.Visible = True
  End If
End Sub

Public Sub NextButton_OnClick(sender As Object, args As EventArgs)
  currentPage = Convert.ToInt32(CurrentPageLabel.Text)
  currentPage += 1
  GetProfiles()
End Sub

Public Sub PreviousButton_OnClick(sender As Object, args As EventArgs)
  currentPage = Convert.ToInt32(CurrentPageLabel.Text)
  currentPage -= 1
  GetProfiles()
End Sub

Public Sub ModifyInactiveDaysButton_OnClick(sender As Object, args As EventArgs)
  GetProfiles()
End Sub

Public Sub AuthenticationOptionListBox_OnSelectedIndexChanged(sender As Object, args As EventArgs)
  authOption = GetAuthenticationOption()
  GetProfiles()
End Sub

Private Function GetAuthenticationOption() As ProfileAuthenticationOption 
  If Not AuthenticationOptionListBox.SelectedItem Is Nothing Then  
    Select Case AuthenticationOptionListBox.SelectedItem.Value
      Case "Anonymous"
        Return ProfileAuthenticationOption.Anonymous
      Case "Authenticated"
        return ProfileAuthenticationOption.Authenticated
      Case Else
        Return ProfileAuthenticationOption.All
    End Select
  End If

  Return ProfileAuthenticationOption.All
End Function

Public Sub DeleteAllInactiveButton_OnClick(sender As Object, args As EventArgs)
  deletedProfiles = provider.DeleteInactiveProfiles(authOption, _
                      DateTime.Now.Subtract(new TimeSpan(inactiveDays, 0, 0 ,0)))
  DeletedMessage.Text = deletedProfiles.ToString() & " profiles deleted."
  GetProfiles()
End SUb

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Sample: Find Profiles</title>
</head>
<body>

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

  <table border="0" cellpadding="3" cellspacing="3">
    <tr>
      <td valign="top">Authentication Option</td>
      <td valign="top"><asp:ListBox id="AuthenticationOptionListBox" rows="3" runat="Server"
                                    AutoPostBack="True"
                                    OnSelectedIndexChanged="AuthenticationOptionListBox_OnSelectedIndexChanged">
                         <asp:ListItem value="All" selected="True">All</asp:ListItem>
                         <asp:ListItem value="Authenticated">Authenticated</asp:ListItem>
                         <asp:ListItem value="Anonymous">Anonymous</asp:ListItem>
                       </asp:ListBox>
      </td>
    </tr>
    <tr>
      <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>
      <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>
    </tr>
    <tr>
      <td><asp:Label id="DeletedMessage" runat="server" /></td>
      <td><asp:Label id="TotalProfilesLabel" runat="server" /> inactive profiles found.</td>
    </tr>
  </table>

    <asp:Panel id="NavigationPanel" Visible="False" runat="server">
    <table border="0" cellpadding="3" cellspacing="3">
      <tr>
        <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>
      </tr>
    </table>
  </asp:Panel>

  <asp:GridView id="ProfileGrid" runat="server" AutoGenerateColumns="False"
                OnRowCommand="ProfileGrid_Delete"
                CellPadding="2" CellSpacing="1" Gridlines="None">
    <HeaderStyle BackColor="darkblue" ForeColor="white" />
    <Columns>
      <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" />
    </Columns>
  </asp:GridView>

</form>

</body>
</html>

注解

方法从配置文件中applicationName属性指定的应用程序的数据源中删除指定配置文件的所有配置文件信息和属性。 DeleteProfilesThe DeleteProfiles method deletes all profile information and properties for the specified profiles from the data source for the application specified by the applicationName attribute in the configuration file. 要删除的配置文件列表指定为用户名的字符串数组。The list of profiles to delete is specified as a string array of user names. 如果usernames参数中的用户名的配置文件属性和信息在数据源中存在,则会将其删除。If profile properties and information exist in the data source for a user name in the usernames parameter, they are deleted.

返回值可能不同于指定数组的usernames长度。The return value may differ from the length of the specified array of usernames. 这表明指定数组usernames中的某些配置文件已从数据存储中删除。This indicates that some of the profiles in the specified array of usernames were already deleted from the data store.

在对DeleteProfiles方法的调用过程中执行的数据库更新在事务中进行。The database updates that are performed during the call to the DeleteProfiles method are made within a transaction. 如果遇到错误,则回滚事务,并且不执行任何更新。If an error is encountered, the transaction is rolled back and no updates are performed.

另请参阅

DeleteProfiles(ProfileInfoCollection) DeleteProfiles(ProfileInfoCollection) DeleteProfiles(ProfileInfoCollection) DeleteProfiles(ProfileInfoCollection)

从数据源中删除提供的一系列配置文件的配置文件属性和信息。Deletes profile properties and information for the supplied list of profiles from the data source.

public:
 override int DeleteProfiles(System::Web::Profile::ProfileInfoCollection ^ profiles);
public override int DeleteProfiles (System.Web.Profile.ProfileInfoCollection profiles);
override this.DeleteProfiles : System.Web.Profile.ProfileInfoCollection -> int
Public Overrides Function DeleteProfiles (profiles As ProfileInfoCollection) As Integer

参数

profiles
ProfileInfoCollection ProfileInfoCollection ProfileInfoCollection ProfileInfoCollection

一个 ProfileInfoCollection,包含要删除的配置文件的配置文件信息。A ProfileInfoCollection that contains profile information for profiles to be deleted.

返回

从数据源中删除的配置文件的数目。The number of profiles deleted from the data source.

异常

profilesCount 值为零。profiles has a Count value of zero.

-or- profiles 中的一个 ProfileInfo 对象具有一个为空字符串 ("")、长度超过 256 个字符或包含逗号的 UserNameOne of the ProfileInfo objects in profiles has a UserName that is an empty string (""), exceeds a length of 256 characters, or contains a comma.

profilesnullprofiles is null.

-or- profiles 中的一个 ProfileInfo 对象具有一个为 nullUserNameOne of the ProfileInfo objects in profiles has a UserName that is null.

示例

下面的代码示例允许用户使用FindProfilesByUserNameFindInactiveProfilesByUserName方法搜索配置文件。The following code example allows a user to search for profiles using the FindProfilesByUserName and FindInactiveProfilesByUserName methods. 然后,用户可以通过调用DeleteProfiles方法删除返回的配置文件。The user can then delete the returned profiles with a call to the DeleteProfiles method.

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Profile" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

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

ProfileAuthenticationOption authOption;
SqlProfileProvider provider;

int inactiveDays = 90;

public void Page_Load()
{
  InactiveDaysLabel.Text = inactiveDays.ToString();
  authOption = GetAuthenticationOption();

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

  InactiveProfilesLabel.Text = provider.GetNumberOfInactiveProfiles(authOption,
               DateTime.Now.Subtract(new TimeSpan(inactiveDays, 0, 0, 0))).ToString();

  DeletedMessage.Text = "";
}


private ProfileInfoCollection GetProfiles()
{
  ProfileInfoCollection profiles;

  if (ShowInactiveCheckBox.Checked)
  {
    profiles = provider.FindInactiveProfilesByUserName(authOption, 
                 UserNameTextBox.Text, 
                 DateTime.Now.Subtract(new TimeSpan(inactiveDays, 0, 0, 0)),
                 currentPage - 1, pageSize, out totalProfiles);
  }
  else
  {
    profiles = provider.FindProfilesByUserName(authOption, 
                 UserNameTextBox.Text, 
                 currentPage - 1, pageSize, out totalProfiles);
  }

  return profiles;
}

private void ShowProfiles()
{
  if (UserNameTextBox.Text.Trim() == "")
  {
    Msg.Text = "Please specify a user name.";
    NavigationPanel.Visible = false;
    ProfileGrid.Visible = false;
    return;
  }
  
  Msg.Text = "";
  ProfileGrid.Visible = true;

  ProfileGrid.DataSource = GetProfiles();

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

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

  if (currentPage > totalPages)
  {
    currentPage = totalPages;
    ShowProfiles();
    return;
  }

  ProfileGrid.DataBind();

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

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

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

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

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

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

public void GoButton_OnClick(object sender, EventArgs args)
{
  currentPage = 1;
  ShowProfiles();
}

public void ShowInactiveCheckBox_OnCheckedChanged(object sender, EventArgs args)
{
  ShowProfiles();
}

public void DeleteButton_OnClick(object sender, EventArgs args)
{
  provider.DeleteProfiles(GetProfiles());
  DeletedMessage.Text = totalProfiles.ToString() + " profiles deleted.";
  ShowProfiles();
}

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

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

  return ProfileAuthenticationOption.All;
}

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Sample: Find Profiles</title>
</head>
<body>

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

  <asp:Label id="Msg" runat="Server" ForeColor="red" /><br />

  <table border="0" cellpadding="3" cellspacing="3">
    <tr>
      <td valign="top">UserName to Search for:</td>
      <td valign="top" colspan="2">
        <asp:TextBox id="UserNameTextBox" runat="server" />
        <asp:Button id="GoButton" Text=" Go " OnClick="GoButton_OnClick" runat="server" /><br />
      </td>
    </tr>
    <tr>
      <td valign="top">Authentication Option</td>
      <td valign="top"><asp:ListBox id="AuthenticationOptionListBox" rows="3" runat="Server"
                                    AutoPostBack="true"
                                    OnSelectedIndexChanged="AuthenticationOptionListBox_OnSelectedIndexChanged">
                         <asp:ListItem value="All" selected="True">All</asp:ListItem>
                         <asp:ListItem value="Authenticated">Authenticated</asp:ListItem>
                         <asp:ListItem value="Anonymous">Anonymous</asp:ListItem>
                       </asp:ListBox>
      </td>
      <td valign="top"><asp:CheckBox id="ShowInactiveCheckBox" Checked="false" 
                                     AutoPostBack="true" runat="server"
                                     OnCheckedChanged="ShowInactiveCheckBox_OnCheckedChanged" />
                       Show profiles inactive for
                       <asp:Label id="InactiveDaysLabel" runat="server" />
                       days only.<br />
                       There are <asp:Label id="InactiveProfilesLabel" runat="server" />
                       inactive profiles.
      </td>
    </tr>
    <tr>
      <td><asp:Button id="DeleteButton" runat="server" 
                      Text="Delete Profiles" OnClick="DeleteButton_OnClick" />
          <br /><i>(based on search results)</i>
      </td>
      <td valign="top"><asp:Label id="DeletedMessage" runat="server" /></td>
    </tr>
  </table>

  <asp:Panel id="NavigationPanel" Visible="false" runat="server">
    <asp:Label id="TotalProfilesLabel" runat="server" /> profile(s) found.
    <table border="0" cellpadding="3" cellspacing="3">
      <tr>
        <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>
      </tr>
    </table>
  </asp:Panel>

  <asp:DataGrid id="ProfileGrid" runat="server"
                CellPadding="2" CellSpacing="1"
                Gridlines="Both">
    <HeaderStyle BackColor="darkblue" ForeColor="white" />
  </asp:DataGrid>

</form>

</body>
</html>
<%@ Page Language="VB" %>
<%@ Import Namespace="System.Web.Profile" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

Dim pageSize As Integer = 5
Dim totalProfiles As Integer
Dim totalPages As Integer
Dim currentPage As Integer = 1

Dim authOption As ProfileAuthenticationOption 
Dim provider As SqlProfileProvider 

Dim inactiveDays As Integer = 90

Public Sub Page_Load()
  InactiveDaysLabel.Text = inactiveDays.ToString()
  authOption = GetAuthenticationOption()

  provider = CType(Profile.Providers("SqlProvider"), SqlProfileProvider)

  InactiveProfilesLabel.Text = provider.GetNumberOfInactiveProfiles(authOption, _
               DateTime.Now.Subtract(New TimeSpan(inactiveDays, 0, 0, 0))).ToString()

  DeletedMessage.Text = ""
End Sub


Private Function GetProfiles() As ProfileInfoCollection 
  Dim profiles As ProfileInfoCollection 

  If ShowInactiveCheckBox.Checked Then  
    profiles = provider.FindInactiveProfilesByUserName(authOption, _
                 UserNameTextBox.Text, _
                 DateTime.Now.Subtract(New TimeSpan(inactiveDays, 0, 0, 0)), _
                 currentPage - 1, pageSize, totalProfiles)
  Else
    profiles = provider.FindProfilesByUserName(authOption, _
                 UserNameTextBox.Text, _
                 currentPage - 1, pageSize, totalProfiles)
  End If

  Return profiles
End Function

Private Sub ShowProfiles()
  If UserNameTextBox.Text.Trim() = "" Then  
    Msg.Text = "Please specify a user name."
    NavigationPanel.Visible = False
    ProfileGrid.Visible = False
    Return
  End If
  
  Msg.Text = ""
  ProfileGrid.Visible = True

  ProfileGrid.DataSource = GetProfiles()

  totalPages = ((totalProfiles - 1) \ pageSize) + 1

  ' Ensure that we do not navigate past the last page of users.

  If currentPage > totalPages Then  
    currentPage = totalPages
    ShowProfiles()
    Return
  End If

  ProfileGrid.DataBind()

  TotalProfilesLabel.Text = totalProfiles.ToString()
  CurrentPageLabel.Text = currentPage.ToString()
  TotalPagesLabel.Text = totalPages.ToString()

  If currentPage = totalPages Then
    NextButton.Visible = False
  Else
    NextButton.Visible = True
  End If

  If currentPage = 1 Then
    PreviousButton.Visible = False
  Else
    PreviousButton.Visible = True
  End If

  If totalProfiles <= 0 Then
    NavigationPanel.Visible = False
  Else
    NavigationPanel.Visible = True
  End If
End Sub

Public Sub NextButton_OnClick(sender As Object, args As EventArgs)
  currentPage = Convert.ToInt32(CurrentPageLabel.Text)
  currentPage += 1
  ShowProfiles()
End Sub

Public Sub PreviousButton_OnClick(sender As Object, args As EventArgs)
  currentPage = Convert.ToInt32(CurrentPageLabel.Text)
  currentPage -= 1
  ShowProfiles()
End Sub

Public Sub GoButton_OnClick(sender As Object, args As EventArgs)
  currentPage = 1
  ShowProfiles()
End Sub

Public Sub ShowInactiveCheckBox_OnCheckedChanged(sender As Object, args As EventArgs)
  ShowProfiles()
End Sub

Public Sub DeleteButton_OnClick(sender As Object, args As EventArgs)
  provider.DeleteProfiles(GetProfiles())
  DeletedMessage.Text = totalProfiles.ToString() & " profiles deleted."
  ShowProfiles()
End Sub

Public Sub AuthenticationOptionListBox_OnSelectedIndexChanged(sender As Object, args As EventArgs)
  authOption = GetAuthenticationOption()
  ShowProfiles()
End Sub

Private Function GetAuthenticationOption() As ProfileAuthenticationOption 
  If Not AuthenticationOptionListBox.SelectedItem Is Nothing Then  
    Select Case AuthenticationOptionListBox.SelectedItem.Value    
      Case "Anonymous"
        Return ProfileAuthenticationOption.Anonymous
      Case "Authenticated"
        Return ProfileAuthenticationOption.Authenticated
      Case Else
        Return ProfileAuthenticationOption.All
    End Select
  End If

  Return ProfileAuthenticationOption.All
End Function

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Sample Find Profiles</title>
</head>
<body>

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

  <asp:Label id="Msg" runat="Server" ForeColor="red" /><br />

  <table border="0" cellpadding="3" cellspacing="3">
    <tr>
      <td valign="top">UserName to Search for</td>
      <td valign="top" colspan="2">
        <asp:TextBox id="UserNameTextBox" runat="server" />
        <asp:Button id="GoButton" Text=" Go " OnClick="GoButton_OnClick" runat="server" /><br />
      </td>
    </tr>
    <tr>
      <td valign="top">Authentication Option</td>
      <td valign="top"><asp:ListBox id="AuthenticationOptionListBox" rows="3" runat="Server"
                                    AutoPostBack="True"
                                    OnSelectedIndexChanged="AuthenticationOptionListBox_OnSelectedIndexChanged">
                         <asp:ListItem value="All" selected="True">All</asp:ListItem>
                         <asp:ListItem value="Authenticated">Authenticated</asp:ListItem>
                         <asp:ListItem value="Anonymous">Anonymous</asp:ListItem>
                       </asp:ListBox>
      </td>
      <td valign="top"><asp:CheckBox id="ShowInactiveCheckBox" Checked="False" 
                                     AutoPostBack="True" runat="server"
                                     OnCheckedChanged="ShowInactiveCheckBox_OnCheckedChanged" />
                       Show profiles inactive for
                       <asp:Label id="InactiveDaysLabel" runat="server" />
                       days only.<br />
                       There are <asp:Label id="InactiveProfilesLabel" runat="server" />
                       inactive profiles.
      </td>
    </tr>
    <tr>
      <td><asp:Button id="DeleteButton" runat="server" 
                      Text="Delete Profiles" OnClick="DeleteButton_OnClick" />
          <br /><i>(based on search results)</i>
      </td>
      <td valign="top"><asp:Label id="DeletedMessage" runat="server" /></td>
    </tr>
  </table>

  <asp:Panel id="NavigationPanel" Visible="False" runat="server">
    <asp:Label id="TotalProfilesLabel" runat="server" /> profile(s) found.
    <table border="0" cellpadding="3" cellspacing="3">
      <tr>
        <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>
      </tr>
    </table>
  </asp:Panel>

  <asp:DataGrid id="ProfileGrid" runat="server"
                CellPadding="2" CellSpacing="1"
                Gridlines="Both">
    <HeaderStyle BackColor="darkblue" ForeColor="white" />
  </asp:DataGrid>

</form>

</body>
</html>

注解

方法从配置文件中applicationName属性指定的应用程序的数据源中删除指定配置文件的所有配置文件信息和属性。 DeleteProfilesThe DeleteProfiles method deletes all profile information and properties for the specified profiles from the data source for the application specified by the applicationName attribute in the configuration file. ProfileInfoCollection 使用profiles作为参数传递的来指定要删除的配置文件的列表。The list of profiles to delete is specified using a ProfileInfoCollection that is passed as the profiles parameter. ProfileInfoCollection可以从GetAllInactiveProfiles、、和FindProfilesByUserName方法返回FindInactiveProfilesByUserNameGetAllProfilesA ProfileInfoCollection can be returned from the GetAllProfiles, GetAllInactiveProfiles, FindProfilesByUserName, and FindInactiveProfilesByUserName methods.

返回值可能与提供Count ProfileInfoCollection的的值不同。The return value may differ from the Count value for the supplied ProfileInfoCollection. 这表明在数据存储中找不到指定ProfileInfoCollection的中的某些配置文件。This indicates that some of the profiles in the specified ProfileInfoCollection were no longer found in the data store.

在对DeleteProfiles方法的调用过程中执行的数据库更新在事务中进行。The database updates that are performed during the call to the DeleteProfiles method are made within a transaction. 如果遇到错误,则回滚事务,并且不执行任何更新。If an error is encountered, the transaction is rolled back and no updates are performed.

另请参阅

适用于