tis9700
asked on
membership.getuser() for parameter to display custom user information
Hello,
I set up my site using a SQlMembershipProvider and Customized the CreateUserWizard to collect additional user information such as LastName, FirstName, etc.
I created a table to store the additional info instead of implementing profiles because I didn't wat to be tied to that structure.
Now I'm having trouble retrieving the additional user information to display on page in labels or text boxes, after the user is logged in.
I'm trying a 3 Tiered Architecture with business objects for the first time and I'm probably doing this wrong or making it difficult but I really trying to learn it. I'm pretty new to programming.
Please check out my attachment and give me some advice....
Under GetOfficerInfo function, I get an error with Return reader --Name 'reader' is not declared.
Thanks MyCode.pdf
I set up my site using a SQlMembershipProvider and Customized the CreateUserWizard to collect additional user information such as LastName, FirstName, etc.
I created a table to store the additional info instead of implementing profiles because I didn't wat to be tied to that structure.
Now I'm having trouble retrieving the additional user information to display on page in labels or text boxes, after the user is logged in.
I'm trying a 3 Tiered Architecture with business objects for the first time and I'm probably doing this wrong or making it difficult but I really trying to learn it. I'm pretty new to programming.
Please check out my attachment and give me some advice....
Under GetOfficerInfo function, I get an error with Return reader --Name 'reader' is not declared.
Thanks MyCode.pdf
The problem is that the variable 'reader' is not available to the return statement. Create an empty reader at a higher level in the code tree and reference it in the If statement.
since reader is declared within the scope of the using statement it is not available for return. what you should actually do is declare your officerInfo object higher up and return that since that is what the return type of the sub is
i think this should do it
Public Shared Function GetOfficerInfo(ByVal uId As String) As OfficerInfo
Dim errorstr As String = String.Empty
Dim offNo As New OfficerInfo
'get a reference to the currenly logged on user
Dim currentUser As MembershipUser = Membership.GetUser("UserId")
'determine the currently logged on user's UserId value
Dim currentUserId As Guid = CType(currentUser.ProviderUserKey, Guid)
Using conn As New SqlConnection _
(ConfigurationManager.ConnectionStrings _
("connEnforceResource").ConnectionString)
Try
conn.Open();
Using cmd As New SqlCommand("GetUserProfile", conn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@userId", currentUserId)
Dim reader As SqlDataReader = cmd.ExecuteReader(CommandBehavior.SingleRow)
If reader.Read Then
'offNo.UserId = rd("UserId")
offNo.OfficerNo = reader("OfficerNo")
offNo.FirstName = reader("FirstName")
offNo.LastName = reader("LastName")
End If
End Using
Catch ex As Exception
errorstr += "" & ex.Message
Return Nothing
Finally
CType(conn, IDisposable).Dispose()
End Try
Return offNo 'have a error here Name ‘reader’ is not declared.
End Using
End Function
ASKER
Thanks for responding.
Burakiewicz,
I made the chages you suggested. By the way, was conn.Open(); a typo or because you mainly use C#?
Anyway, after implemeinting your suggested changes, I created a function in a Business Logic Layer..
Public Class OfficerBl
Public Shared FunctiongetOfficer(ByVal uId as String) as OfficerInfo
Return ActivityDll.GetOfficerInfo (uId)
End Function
End Class
Then I try to display the results in three textboxes after the user logs in.....
The textboxes are actually located within a Master page....
Master Page code-behind
Public Sub LoadInfo()
Dim displayOfficer as New OfficerInfo
txtBadge.text = displayOfficer .OfficerNo
txtFirstName.text = displayOfficer .FirstName
txtLastName.text = displayOfficer .LastName
End Sub
Then in the Page_Load event...
If Not Page.IsPostBack Then
LoadInfo()
End If
While I have no error on compling, no values are returned.
In my data access layer, I have (Byval uId as string) , should I set that equal to currentUserId? Or something? Could that be the issue?
Thanks
Burakiewicz,
I made the chages you suggested. By the way, was conn.Open(); a typo or because you mainly use C#?
Anyway, after implemeinting your suggested changes, I created a function in a Business Logic Layer..
Public Class OfficerBl
Public Shared FunctiongetOfficer(ByVal uId as String) as OfficerInfo
Return ActivityDll.GetOfficerInfo
End Function
End Class
Then I try to display the results in three textboxes after the user logs in.....
The textboxes are actually located within a Master page....
Master Page code-behind
Public Sub LoadInfo()
Dim displayOfficer as New OfficerInfo
txtBadge.text = displayOfficer .OfficerNo
txtFirstName.text = displayOfficer .FirstName
txtLastName.text = displayOfficer .LastName
End Sub
Then in the Page_Load event...
If Not Page.IsPostBack Then
LoadInfo()
End If
While I have no error on compling, no values are returned.
In my data access layer, I have (Byval uId as string) , should I set that equal to currentUserId? Or something? Could that be the issue?
Thanks
C#
In your load i dont see you calling the FunctionGetOfficer and setting that to displayOfficer
In your load i dont see you calling the FunctionGetOfficer and setting that to displayOfficer
youll need to add something like this to the load
Dim displayOfficer As New OfficerInfo
displayOfficer = GetOfficerInfo("Test")<--r eplace test with the current id you want
Dim displayOfficer As New OfficerInfo
displayOfficer = GetOfficerInfo("Test")<--r
actually since in the latest code its
displayOfficer = FunctiongetOfficer("UID")
displayOfficer = FunctiongetOfficer("UID")
ASKER
Ok...
I added ...
displayOfficer = OfficerBl.getOfficer("uId" )
And I at least get an error when I log in...within my ActivityDll
Null Reference Exception
Object reference not set to an instance of an object
Line 137: Dim currentUserId as Guid = CType(currentuser.Provider UserKey, Guid)
So I wonder...
Am I not getting the User from membership.getuser()?
Maybe I should have
Dim currentUser as Membership = Membership.GetUser("UserId ")
Dim currentUserId as Guid = CType(currentuser.Provider UserKey, Guid)
someplace other than the data access layer . Perhaps in my code behind?
and
cmd.Parameters.AddWithValu e("@userId ", uId)
Man, I am getting confused!
I added ...
displayOfficer = OfficerBl.getOfficer("uId"
And I at least get an error when I log in...within my ActivityDll
Null Reference Exception
Object reference not set to an instance of an object
Line 137: Dim currentUserId as Guid = CType(currentuser.Provider
So I wonder...
Am I not getting the User from membership.getuser()?
Maybe I should have
Dim currentUser as Membership = Membership.GetUser("UserId
Dim currentUserId as Guid = CType(currentuser.Provider
someplace other than the data access layer . Perhaps in my code behind?
and
cmd.Parameters.AddWithValu
Man, I am getting confused!
displayOfficer = OfficerBl.getOfficer("uId" )
"uid" needs to be replace with the actual user id you want to pass
and this
Dim currentUser as Membership = Membership.GetUser("UserId ")
UserId needs to be the user id you are looking for
and to check that you are getting the right user
Dim currentUser as Membership = Membership.GetUser("UserId ")
Dim currentUserId as Guid = CType(currentuser.Provider UserKey, Guid)<-- put breakpoint and see if user is correct
"uid" needs to be replace with the actual user id you want to pass
and this
Dim currentUser as Membership = Membership.GetUser("UserId
UserId needs to be the user id you are looking for
and to check that you are getting the right user
Dim currentUser as Membership = Membership.GetUser("UserId
Dim currentUserId as Guid = CType(currentuser.Provider
ASKER
Ok
Put a breakpoint on that line
and currentUserId is returning empty
Put a breakpoint on that line
and currentUserId is returning empty
what does current user have when it hits the breakpoint? currentUserId will be empty until you step passed the breakpoint
you will need to have the "UserID" be the user id you are grabbing
Dim currentUser as Membership = Membership.GetUser(Put user id here)
you will need to have the "UserID" be the user id you are grabbing
Dim currentUser as Membership = Membership.GetUser(Put user id here)
ASKER
Hey burakiewicz,
I have to cut off for the night. Family Thanksgiving stuff.
I'll be back in the morning. Thanks for all you help today. Hope I'm not wearing you out.
I have to cut off for the night. Family Thanksgiving stuff.
I'll be back in the morning. Thanks for all you help today. Hope I'm not wearing you out.
ASKER
Hey burakiewicz,
I got it working!
I moved the currentUser and currentUserId to my Presentation Layer on the Page_Load
Used HttpContext.Current.User.I dentity.Na me to get the currentUser and passed it to the currentUserId to get the userId
set currentUserId = currentUser.ProviderUserKe y.ToString
Then passed currentUserId to getOfficer object for the OfficerBl..
I attached my revised code. Would you look at it and tell me what you think? Should I be checking the object to make sure it is not nothing? Or anything else that is best practice?
Thanks and Happy Thanksgiving!
myCode.pdf
I got it working!
I moved the currentUser and currentUserId to my Presentation Layer on the Page_Load
Used HttpContext.Current.User.I
set currentUserId = currentUser.ProviderUserKe
Then passed currentUserId to getOfficer object for the OfficerBl..
I attached my revised code. Would you look at it and tell me what you think? Should I be checking the object to make sure it is not nothing? Or anything else that is best practice?
Thanks and Happy Thanksgiving!
myCode.pdf
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thanks buraiewicz,
I appreciate the help and advice you've given me. I'll start researching how to handle exceptions.
I appreciate the help and advice you've given me. I'll start researching how to handle exceptions.