1

私は2つのメンバーシッププロバイダーを使用しています。私が次の声明を宣言したとき

Dim allUsers As MembershipUserCollection = Membership.Providers("MembershipRoleManager").GetAllUsers

次に、このエラーメッセージが表示されました。

Argument not specified for paramenter 'totalRecords' of 'Public MustOverride Function GetAllUsers(pageIndex as Integer, pageSize as Integer, ByRef totalRecords as Integer) As System.Web.Security.MembershipUserCollection'

次に、私はそれがこのように求めたものを追加しました:

Dim allUsers As MembershipUserCollection = Membership.Providers("MembershipRoleManager").GetAllUsers(1, 50, 100)

見返りはありません。私はそれをデバッグし、allUsers=Nothing。

  1. 上記の宣言の何が問題になっていますか?

  2. Membership.Providers( "MembershipRoleManager")。GetAllUsersを呼び出すときに、本当にパラメーターを提供する必要がありますか?

アップデート1

もし、私が以下のステートメントを使用した場合:

Dim allUsers As MembershipUserCollection = Membership.Providers("MembershipRoleManager").GetAllUsers(0, 0, totalUser)

このエラーメッセージが表示されました:

The pageSize must be greater than zero.
Parameter name: pageSize. 
[ArgumentException: The pageSize must be greater than zero.
Parameter name: pageSize]
   System.Web.Security.SqlMembershipProvider.GetAllUsers(Int32 pageIndex, Int32 pageSize, Int32& totalRecords) +1848357

ただし、pageSizeパラメータを指定した場合は機能します。

Dim pageSize As Integer = GetTotalNumberOfUser()
Dim allUsers As MembershipUserCollection = Membership.Providers("MembershipRoleManager").GetAllUsers(0, pageSize, totalUser)

このステートメントDimpageSizeAs Integer = GetTotalNumberOfUser()は、カウントされたレコードの合計を返します。pageSizeパラメータ値を指定する必要があるため、ユーザーの合計数を取得するために、データベースへのラウンドトリップがすでに行われています。

4

2 に答える 2

2

re#1:totalRecordsは出力パラメータです。

int totalRecords;
Membership.Providers["xxxx"].GetAllUsers(0, 10, out totalRecords);

VB

Dim totalRecords As Integer
Membership.Providers("xxxx").GetAllUsers(0, 10, totalRecords)

totalRecordsページングのレコード数を取得するために使用します。例:

re#2:うーん、いいえ、コードを期待どおりに動作させたい場合を除いて、パラメーター値を指定する必要はありません。笑。私はvbを書くのに費やした12年を見逃さないでください。

しかし、真剣に。ええ、文書化されたとおりにパラメータを提供し、文書化されたとおりに結果を取得します。それがどのように機能するかです。

MSDNから

GetAllUsersによって返される結果は、pageIndexパラメーターとpageSizeパラメーターによって制約されます。pageSizeパラメーターは、MembershipUserCollectionに返されるMembershipUserオブジェクトの最大数を識別します。pageIndexパラメーターは、返される結果のページを識別します。0は、最初のページを識別します。totalRecordsパラメーターは、構成されたapplicationNameのメンバーシップユーザーの総数に設定されるoutパラメーターです。たとえば、構成されたapplicationNameに13人のユーザーがいて、pageIndex値が1でpageSizeが5の場合、返されるMembershipUserCollectionには、返される6番目から10番目のユーザーが含まれます。totalRecordsは13に設定されます。

于 2010-02-24T19:08:36.997 に答える
0

GetAllUsers(int, int, int)ユーザーをページ分割するために使用されるように設計されているため、開始する結果のページ、ページあたりの結果の数を渡す必要があり、3番目のパラメーターにレコードの総数が入力されます。

データベース内のすべてのユーザーのコレクションをデータのページで取得します

GetAllUsers()次の警告が付属しています:

非常に大規模なユーザーデータベースでGetAllUsersメソッドを使用する場合は、ASP.NETページに結果として生じるMembershipUserCollectionがアプリケーションのパフォーマンスを低下させる可能性があるため、注意してください。

ただし、あなたの質問では、2つの異なるメンバーシッププロバイダーを使用していると述べています。使用するとCustomSqlRoleManagerユーザーは返されませんが、(おそらく)から結果が返されMembershipRoleManagerます。

GetAllUsers()?を使用して電話をかけてみましたMembershipRoleManagerか?

背後にあるデータベースにCustomSqlRoleManager現在ユーザーがいない可能性はありますか?CustomSqlRoleManager名前が貧弱で、メンバーをまったく扱っておらず、役割だけを扱っている可能性はありますか?

于 2010-03-09T08:41:23.540 に答える