1

メンバーシッププロバイダーから現在のユーザーを取得しようとしていますUserIdが、計画どおりに動作しません。コードは次のとおりです。

cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "forum_GetUsernameId";
cmd.Parameters.Add("@username" , user);
var data = cmd.ExecuteScalar();

 @username nvarchar 
   AS
 SELECT UserId
 FROM aspnet_Users
 WHERE UserName = @username

デバッグ中に、私が呼び出すべきメソッドでないnull限り、データがwitchを返すことはできないことに気づきました。ExecuteScalar()また、ユーザーは私が確信している現在のユーザー名に設定されます。

私はここで何が間違っているのですか?

4

3 に答える 3

2

とにかく使用している場合はSqlMemberShipProvider簡単です:

Guid userID = (Guid) Membership.GetUser().ProviderUserKey; 
于 2013-01-03T14:55:36.727 に答える
1

SqlCommand.Parameter.Add()コードでメソッドを使用しています。引数が 2 つのメソッドを使用している場合はAdd()、2 つの選択肢があります。

Add(string, SqlDbType);
Add(string, object);

ここに画像の説明を入力

この場合、最初のものを使用しようとしていると思いますAdd()。したがって、データベースを見るUserIdと、uniquidentifier.

ここに画像の説明を入力

そのため、コードを次のように変更する必要があります。

cmd.Parameters.Add("@username", SqlDbType.UniqueIdentifier);

ExecuteScalar()コードで使用しても問題はありません。クエリの最初の列の最初の行を返します。したがって、クエリは 1 つの行を含む 1 つの列のみを返しますが、問題はありません。しかし、ExecuteScalar()オブジェクトを返します。おそらく、 で文字列に変換する必要があるかもしれません.ToString()

于 2013-01-03T15:23:58.943 に答える
0

を使用している場合はSqlMembershipProvider、Tim の指示に従ってください。

ExecuteScalar()それ以外の場合は、フィールド/列からデータを読み取るために使用する必要はないと思います。使用してみてくださいExecuteReader:

var data = cmd.ExecuteReader();
while(reader.Read())
{
 //code goes here
}
于 2013-01-03T15:24:39.870 に答える