<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" version="2.0">
  <channel>
    <title>Brian Mishler on .Net - CommunityServer</title>
    <link>http://mishler.net/</link>
    <description />
    <language>en-us</language>
    <copyright>Brian Mishler</copyright>
    <lastBuildDate>Mon, 10 Apr 2006 02:12:06 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>bmishler@qualitydata.com</managingEditor>
    <webMaster>bmishler@qualitydata.com</webMaster>
    <item>
      <trackback:ping>http://mishler.net/Trackback.aspx?guid=003dc4ae-d649-47f2-a019-7be1321a2f06</trackback:ping>
      <pingback:server>http://mishler.net/pingback.aspx</pingback:server>
      <pingback:target>http://mishler.net/PermaLink,guid,003dc4ae-d649-47f2-a019-7be1321a2f06.aspx</pingback:target>
      <dc:creator>Brian Mishler</dc:creator>
      <wfw:comment>http://mishler.net/CommentView,guid,003dc4ae-d649-47f2-a019-7be1321a2f06.aspx</wfw:comment>
      <wfw:commentRss>http://mishler.net/SyndicationService.asmx/GetEntryCommentsRss?guid=003dc4ae-d649-47f2-a019-7be1321a2f06</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <title>Using existing Asp.Net Membership data with CommunityServer</title>
      <guid isPermaLink="false">http://mishler.net/PermaLink,guid,003dc4ae-d649-47f2-a019-7be1321a2f06.aspx</guid>
      <link>http://mishler.net/2006/04/10/UsingExistingAspNetMembershipDataWithCommunityServer.aspx</link>
      <pubDate>Mon, 10 Apr 2006 02:12:06 GMT</pubDate>
      <description>&lt;div class=Section1&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;I really like the new Version 2.0 of CommunityServer
and have been trying to figure out how to best integrate it with my existing web site.
Since I already have several thousand members registered on my site, I would like
to either migrate their data into Community Server or find a clean way to share authentication
information so my existing members do not have to maintain separate passwords for
the existing customer-service and new community server functions. &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;I figured I would ask Telligent about the Asp.Net Forms
Authentication Module for CommunityServer so I initiated contact with their Sales
team. While I waited for a response, I decided to open up the database and figure
out what is going on inside. &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;table class=MsoNormalTable cellspacing=0 cellpadding=0 border=0&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 0in; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in; PADDING-TOP: 0in"&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 12pt"&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;The first thing I noticed was that the CommunityServer
database includes the tables and stored procedures used by the AspNet membership system.
These include AspNet Applications, AspNet Membership, AspNet Profile, AspNet Users
and several more.&amp;nbsp;&lt;br&gt;
&lt;br&gt;
A quick look at web.config confirmed that CommunityServer has created custom providers
that (presumably) inherit from SQLMembershipProvider, SQLRoleProvider and SQLProfileProvider.&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 0in; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in; PADDING-TOP: 0in"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;img height=293 src="http://brian.mishler.net/content/binary/image00112.gif" width=208 border=0&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;I really like the fact that CommunityServer leverages
the AspNet membership providers for generic mainstream authentication functions. I
believe this is a trend we will see more of now that Microsoft has established a de-facto
standard. Telligent has done the smart thing by extending the base providers with
their own customized versions that provide application-specific functionality and
utilize additional data tables. &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;With hopes of sharing common membership information,
I set out to understand the extra information required by CommunityServer for records
that were initiated from my own system.&amp;nbsp; After a bit of trial and error I found
that CommunityServer expects each user to be a member of the "everyone" role in the
AspNet membership system and that a record is required for each member in the cs users
and cs profiles tables which maintain Community-server specific informaiton on each
member.&amp;nbsp; At this point, I was feeling pretty confident about my chances of sharing
CommunityServer's membership system with my own, so I imported my own data into the
CommunityServer database. After doing so, I was able to log into CommunityServer with
one of my imported user accounts and I figured I was done.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;Knowing a thing or two about Asp.Net providers, I reset
the "ApplicationName" attribute for each of the three providers (SqlProfileProvider,
SqlRoleProvider and SqlMembershipProvider) in my own application's web.config.&amp;nbsp;
This would need to be "dev" in order that any new records created by my system would
wind up with the same ApplicationID that is used by CommunityServer's providers.&amp;nbsp;
Finally, I changed my connection string to point over to CommunityServer and then
"let 'er rip".&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;Curses! It didn't work. My application was dead and
I was being told that &lt;/span&gt;&lt;em&gt;Procedure or function aspnet Membership GetPasswordWithFormat
has too many arguments specified. &lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;Hmmm. I remember this. It was the same error message
I got when I upgraded from the .Net 2.0 Beta to the live version last October.&amp;nbsp;
Sure enough, as I looked into it a little more, I found that CommunityServer 2.0 is
shipping with the beta versions of the Asp.Net membership providers. A lot of early
adopters will remember this situation: Microsoft told us that they reserved the right
to change the product prior to final release--and they did. The membership tables
did not change but many of the stored procedures did.&amp;nbsp; For the folks that built
sites with the basic providers, the issue was easily resolved with the AspNet regSql
utility that comes with the framework. (It can be found at c:\windows\microsoft.net\framework\v2.0.50727\aspnet
regsql.exe.)&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;Here are (most of) the differences:&lt;/span&gt;
&lt;/p&gt;
&lt;table class=MsoNormalTable cellpadding=0 border=0&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;strong&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Stored Procedure&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;strong&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Beta Version Parameters&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;strong&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Version 2.0 Parameters&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;strong&gt;&lt;span style="FONT-SIZE: 10pt"&gt;aspnet Membership GetPasswordWithFormat&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
@ApplicationName NVARCHAR(256)
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
@ApplicationName nvarchar(256)
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt" rowspan=3&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;Provider Exception: &lt;/span&gt;&lt;em&gt;Procedure or function
aspnet Membership GetPasswordWithFormat has too many arguments specified&lt;/em&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;?XML:NAMESPACE PREFIX = O /&gt;@UserName NVARCHAR(256)&lt;O:P&gt;&lt;/O:P&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@UserName nvarchar(256)&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@UpdateLastLoginActivityDate bit&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@CurrentTimeUtc datetime&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;strong&gt;&lt;span style="FONT-SIZE: 10pt"&gt;aspnet Membership UpdateUserInfo&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
@ApplicationName NVARCHAR(256)
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
@ApplicationName nvarchar(256)
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt" rowspan=6&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;Provider Exception: &lt;/span&gt;&lt;em&gt;Procedure or function
aspnet Membership UpdateUserInfo has too many arguments specified&lt;/em&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@UserName NVARCHAR(256)&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@UserName nvarchar(256)&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@IsPasswordCorrect BIT&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@IsPasswordCorrect bit&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@UpdateLastLoginActivityDate BIT&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@UpdateLastLoginActivityDate bit&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@MaxInvalidPasswordAttempts INT&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@MaxInvalidPasswordAttempts int&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@PasswordAttemptWindow INT &amp;nbsp;&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@PasswordAttemptWindow int&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@TimeZoneAdjustment INT&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@CurrentTimeUtc datetime&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@LastLoginDate datetime&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@LastActivityDate datetime&lt;O:P&gt;&lt;/O:P&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;strong&gt;&lt;span style="FONT-SIZE: 10pt"&gt;aspnet Profile GetProperties&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
@ApplicationName NVARCHAR(256) &amp;nbsp;&amp;nbsp; 
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
@ApplicationName nvarchar(256&amp;nbsp; 
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt" rowspan=3&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;Provider Exception: &lt;/span&gt;&lt;em&gt;Procedure or Function
'aspnet Profile GetProperties' expects parameter '@TimeZoneAdjustment', which was
not supplied&lt;/em&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@UserName NVARCHAR(256) &amp;nbsp;&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@UserName nvarchar(256) &amp;nbsp;&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@TimeZoneAdjustment INT&lt;O:P&gt;&lt;/O:P&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@CurrentTimeUtc datetime&lt;O:P&gt;&lt;/O:P&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;strong&gt;&lt;span style="FONT-SIZE: 10pt"&gt;aspnet Membership GetUserByName&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
@ApplicationName NVARCHAR(256)
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
@ApplicationName nvarchar(256)
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt" rowspan=3&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;Provider Exception: &lt;/span&gt;&lt;em&gt;Procedure or Function
'aspnet Membership GetUserByName' expects parameter '@TimeZoneAdjustment', which was
not supplied&lt;/em&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@UserName NVARCHAR(256)&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@UserName nvarchar(256)&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@TimeZoneAdjustment INT &amp;nbsp;&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@CurrentTimeUtc datetime,&lt;O:P&gt;&lt;/O:P&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&amp;nbsp; &amp;nbsp; 
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@UpdateLastActivity &amp;nbsp; BIT = 0&lt;O:P&gt;&lt;/O:P&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@UpdateLastActivity bit = 0&lt;O:P&gt;&lt;/O:P&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;strong&gt;&lt;span style="FONT-SIZE: 10pt"&gt;aspnet Membership GetUserByUserId&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
@UserId UNIQUEIDENTIFIER &amp;nbsp;&amp;nbsp; 
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&amp;nbsp;@UserId uniqueidentifier
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt" rowspan=3&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;Provider Exception: &lt;/span&gt;&lt;em&gt;Procedure or Function
'aspnet Membership GetUserByUserId' expects parameter '@TimeZoneAdjustment', which
was not supplied&lt;/em&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@TimeZoneAdjustment INT &amp;nbsp;&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@CurrentTimeUtc datetime&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@UpdateLastActivity BIT = 0&lt;O:P&gt;&lt;/O:P&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@UpdateLastActivity bit = 0&lt;O:P&gt;&lt;/O:P&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;strong&gt;&lt;span style="FONT-SIZE: 10pt"&gt;aspnet Membership CreateUser&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
@ApplicationName NVARCHAR(256)
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
@ApplicationName nvarchar(256)
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt" rowspan=5&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;Provider Exception: &lt;/span&gt;&lt;em&gt;Procedure or Function
'aspnet Membership CreateUser' expects parameter '@TimeZoneAdjustment', which was
not supplied&lt;/em&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@UserName NVARCHAR(256)&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@UserName nvarchar(256)&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@Password NVARCHAR(128) &amp;nbsp;&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@Password nvarchar(128)&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@PasswordSalt NVARCHAR(128)&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@PasswordSalt nvarchar(128)&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@Email NVARCHAR(256)&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@Email nvarchar(256)&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@PasswordQuestion NVARCHAR(256)&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@PasswordQuestion nvarchar(256)&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@PasswordAnswer NVARCHAR(128)&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@PasswordAnswer nvarchar(128)&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@IsApproved BIT&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@IsApproved bit&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@TimeZoneAdjustment INT&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@CurrentTimeUtc datetime&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@CreateDate DATETIME = NULL&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@CreateDate datetime = NULL&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@UniqueEmail INT = 0&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@UniqueEmail int = 0&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@PasswordFormat INT = 0&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@PasswordFormat int = 0&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@UserId UNIQUEIDENTIFIER OUTPUT&lt;O:P&gt;&lt;/O:P&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;@UserId uniqueidentifier OUTPUT&lt;O:P&gt;&lt;/O:P&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;If you built a custom providers for the beta-version
of Asp.Net, a code change would be required to work with the released version of the
schema. &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;At first glance, it appeared that Telligent overlooked
the change, but as I performed additional research, I found that their released version
was designed to provide default backward compatibility with their original (.Net 1.1)
product but also an upgrade path for the folks that want compatibility with the Asp.Net
2.0 Membership System. The CommunityServer 2.0 SDK (&lt;a href="http://communityserver.org/files/40/releases/entry516270.aspx"&gt;http://communityserver.org/files/40/releases/entry516270.aspx&lt;/a&gt;)
includes a readme.txt file that explains what they did and why they did it.&amp;nbsp;
In that document, they explain that "Telligent will be providing both Framework 1.1
and 2.0 compatible binaries."&amp;nbsp; You can update the binaries (dll) files and also
run a script which will update the Schema, but at the expense of 1.1 compatibility.&amp;nbsp;
The readme.txt goes on to explain how to replace the web.config and communityserver.config
files and also how to locate the SQL Script file that may be used to upgrade the default
schema to that of Asp.Net 2.0.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;I am not sure why Beta versions of the Asp.Net schema
are involved at all, however, to utilize the final Asp.Net 2.0 database Schema, you
need to do the following:&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;1. Substitute CommunityServer.ASPNet20MemberRole.dll
for CommunityServer.MemberRole.dll in the \bin folder&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;2. Modify CommunityServer.config to have the MemberRoleProfileProvider
use classes from the new dll. (swap out the config file)&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;3. Swap out the provided web.config file for the one
in the SDK. (not sure of the differences)&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;4. Update the database schema using their provided script.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;-- The only thing left is to get the ASPNet20MemberRole.dll&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;Once I do these things, I am hopeful that I will have
a database schema that works with the "vanilla" Asp.Net providers. If I can get all
this to work, then I should be able to share my membership with that of CommunityServer.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;With all respect due to the great folks at Telligent,
I would like to suggest that they update the default installation (for new users)
to incorporate the released version of the Asp.Net membership schema which should
now be considered the gold standard. I believe there are plenty of folks that might
wish to unify their membership database with that of CommunityServer and it can be
a very easy process if the database schema is consistent.&amp;nbsp; If anyone knows more
or has insight on this subject, I invite your suggestions and comments. &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;div&gt;
&lt;p class=MsoAutoSig&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Brian Mishler&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoAutoSig&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;a href="http://www.qualitydata.com/"&gt;http://www.qualitydata.com&lt;/a&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p class=MsoNormal&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://mishler.net/aggbug.ashx?id=003dc4ae-d649-47f2-a019-7be1321a2f06" /&gt;</description>
      <comments>http://mishler.net/CommentView,guid,003dc4ae-d649-47f2-a019-7be1321a2f06.aspx</comments>
      <category>CommunityServer</category>
    </item>
    <item>
      <trackback:ping>http://mishler.net/Trackback.aspx?guid=827f1be1-d138-4d2d-92c1-e339bf16f950</trackback:ping>
      <pingback:server>http://mishler.net/pingback.aspx</pingback:server>
      <pingback:target>http://mishler.net/PermaLink,guid,827f1be1-d138-4d2d-92c1-e339bf16f950.aspx</pingback:target>
      <dc:creator>Brian Mishler</dc:creator>
      <wfw:comment>http://mishler.net/CommentView,guid,827f1be1-d138-4d2d-92c1-e339bf16f950.aspx</wfw:comment>
      <wfw:commentRss>http://mishler.net/SyndicationService.asmx/GetEntryCommentsRss?guid=827f1be1-d138-4d2d-92c1-e339bf16f950</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <title>How to import existing Asp.Net Membership data into CommunityServer</title>
      <guid isPermaLink="false">http://mishler.net/PermaLink,guid,827f1be1-d138-4d2d-92c1-e339bf16f950.aspx</guid>
      <link>http://mishler.net/2006/04/07/HowToImportExistingAspNetMembershipDataIntoCommunityServer.aspx</link>
      <pubDate>Fri, 07 Apr 2006 02:10:19 GMT</pubDate>
      <description>&lt;div class=Section1&gt;
&lt;h4&gt;How to import existing Asp.Net Membership data into CommunityServer 
&lt;/h4&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;I am in the process of enhancing my existing web site
with the forums capabilities offered by CommunityServer. Since I already have several
thousand members registered on my site, I would like to either migrate their data
into Community Server or find a clean way to share authentication information so my
existing members do not have to maintain separate passwords for the existing customer-service
and new community server functions. &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;When I saw that CommunityServer was using the Asp.Net
membership provider model for authentication, I became hopeful that I might be able
to share a common membership database with my own web application since I am using
Microsoft's SqlMembershipProvider.&amp;nbsp; Unfortunately, I found that CommunityServer
is using a non-standard membership database schema (by default) which is incompatible
with Microsoft's SQL providers, so I would not be able to simply point my provider
to their membership tables. I did look into Telligent's Asp.Net Forms Authentication
module but, as was explained to me, that module provides access for existing CommunityServer
users and, of course, my users were not in the CommunityServer membrship database.
In any case, I was curious to see if I could import my existing membership users into
Community Server.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Part 1 - Import existing membership users into the CommunityServer database&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;Using SQL Server Import and Export Wizard in SQL Server
Management Studio (SQL Server 2005), I was easily able to append the User and Membership
data from my existing application into the corresponding tables in the CommunityServer
database. &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;Since AspNet Membership depends on AspNet Users and
they both depend on AspNet Applications, I found that the Foreign Key constraints
would not let me just check everything off and run the wizard. By running it first
for AspNet Applications and then for AspNet Users, I was able to then import AspNet
Membership as shown below: &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;Step 1: Run the wizard for AspNet Applications. &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;img height=228 src="http://brian.mishler.net/content/binary/image0011.gif" width=459&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;Step 2: Run the wizard again for AspNet Users. &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;img height=229 src="http://brian.mishler.net/content/binary/image0021.gif" width=458 border=0&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;Step 3: Run the wizard one more time for AspNet Membership. &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;img height=209 src="http://brian.mishler.net/content/binary/image003.gif" width=472 border=0&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;Although my data was now physically located in the same
database, a bit of massaging was still necessary to make it usable by CommunityServer.
CommunityServer has its own user-related tables and also my user information is stamped
with a distinct ApplicationId. &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Part 2 - Consolidate the ApplicationID &lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;My data was originally created using mostly generic
provider settings and may therefore be distinguished by a unique ApplicationId in
the AspNet Applications, AspNet Users, AspNet Membership and AspNet Roles tables.
The data which was pre-populated by the CommunityServer Setup Wizard is uniquely identified
by its own ApplicationID. Further, the custom providers defined in CommunityServer’s
web.config file are configured to use the ApplicationID associated with the applicationName
“dev”. As shown here, I actually had two applications in my database at this point. &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;img height=88 src="http://brian.mishler.net/content/binary/image004.gif" width=403 border=0&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;In order for CommunityServer's provider to "see" the
membership data I just imported, I would have to change the ApplicationId in each
AspNet Membership and AspNet Users record to the one corresponding to the "dev" applicationName.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;So, here is the procedure for modifying the imported
data to use the applicationID corresponding to the applicationName “dev” &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;1. Issue the following statements in SQL Server: &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
DECLARE @DevApplicationID uniqueidentifier
&lt;/p&gt;&lt;?XML:NAMESPACE PREFIX = O /&gt;
&lt;O:P&gt;&lt;/O:P&gt;
&lt;p class=MsoNormal&gt;
DECLARE @SlashApplicationID uniqueidentifier
&lt;/p&gt;
&lt;O:P&gt;&lt;/O:P&gt;
&lt;p class=MsoNormal&gt;
&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;
&amp;nbsp; &amp;nbsp; 
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
SELECT @DevApplicationID=applicationID FROM AspNet Applications WHERE ApplicationName='dev'
&lt;/p&gt;
&lt;O:P&gt;&lt;/O:P&gt;
&lt;p class=MsoNormal&gt;
SELECT @SlashApplicationID=applicationID FROM AspNet Applications WHERE ApplicationName='/'
&lt;/p&gt;
&lt;O:P&gt;&lt;/O:P&gt;
&lt;p class=MsoNormal&gt;
&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;
&amp;nbsp; &amp;nbsp; 
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
UPDATE AspNet Membership SET ApplicationID=@DevApplicationID WHERE ApplicationID=@SlashApplicationID
&lt;/p&gt;
&lt;O:P&gt;&lt;/O:P&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;UPDATE AspNet Users SET ApplicationID=@DevApplicationID
WHERE ApplicationID=@SlashApplicationID&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;2. Delete the record in AspNet Applications for ApplicationName=”/”.
This record is now unused. &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
DELETE FROM AspNet Applications WHERE ApplicationName='/'
&lt;/p&gt;
&lt;O:P&gt;&lt;/O:P&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;At this point, all of my existing member records are
physically contained in CommunityServer's Asp.Net membership tables and have been
updated with the same ApplicationID that is referred-to by their custom membership
providers. Still, CommunityServer cannot use my imported data since its custom user
tables have not been loaded. &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Part 3 - CommunityServer’s Roles&lt;/strong&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;I noticed that when a new “guest” user is added into
the system, he/she is added to the “Everyone” role. I was not sure if this is a requirement,
but it was simple enough to do this for each of my existing (legacy) users with the
following SQL Statement:&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;DECLARE @DevApplicationID uniqueidentifier&lt;O:P&gt;&lt;/O:P&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;O:P&gt;&lt;/O:P&gt;
SELECT @DevApplicationID=applicationID FROM AspNet Applications WHERE ApplicationName='dev'
&lt;/p&gt;
&lt;O:P&gt;&lt;/O:P&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;DECLARE @EveryoneRoleID uniqueidentifier&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;SELECT @EveryoneRoleID=RoleID FROM AspNet Roles WHERE
loweredRoleName='everyone' AND ApplicationID=@DevApplicationID&lt;O:P&gt;&lt;/O:P&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
INSERT INTO AspNet UsersInRoles (UserID,RoleID) SELECT UserID,@EveryoneRoleID FROM
AspNet Users WHERE UserID NOT IN (SELECT UserID from AspNet UsersInRoles)
&lt;/p&gt;
&lt;O:P&gt;&lt;/O:P&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;Note that @EveryoneRoleID is the value in the roleID
(GUID) column that corresponds to the “everyone” role in the AspNet roles table. &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Part 4 - Importing data into CommunityServer’s User tables&lt;/strong&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;I really like the fact that CommunityServer leverages
the AspNet membership providers for generic mainstream authentication functions. I
believe this is a trend we will see more of now that Microsoft has established a de-facto
standard. Telligent has done the smart thing by extending the base providers with
their own customized versions that provide application-specific functionality and
utilize additional data tables. &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;While I was not able to find any documentation on the
Internet, I was able, through trial and error, to figure out which minimal data is
required in the CommunityServer tables. &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;The cs users table maps the AspNet membership system’s
UserID to the userID which is used internally by CommunityServer. Whereas Asp.Net
uses a GUID to uniquely identify users, CommunityServer’s userID is an Integer which
is autonumbered. Since most of the fields defaulted to good values, I was able to
populate the CommunityServer Users table with the following SQL Statement: &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
INSERT INTO cs users (membershipID) SELECT UserID from AspNet Membership where UserID
not in (SELECT MembershipID as UserID from cs users)
&lt;/p&gt;
&lt;O:P&gt;&lt;/O:P&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;Notice that CommunityServer knows the AspNet membership
system’s UserID as “MembershipID” in order that it can use the name “UserID” for its
own purposes. &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;The cs UserProfile table includes colums for tracking
the much of the same profile data that is maintained in the AspNet Profile table.
I am not sure why it is being kept in both places but I am guessing that the cs UserProfile
table is left over from previous implementations and still used as the primary storage
location for profile data. In any case, a record is required for each user and the
minimum (non-default) data appears to be the UserID, MembershipID and a settingsID. &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;The UserID and MembershipID were pretty handy for each
user and I discovered that the settingsID corresponded to the key field value in the
cs SiteSettings table. In my case, there was a single record whose value was 1000.
Thus, I was able to initialize the cs UserProfile table with the following SQL Statement: &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
INSERT INTO cs userprofile (membershipID,UserId,settingsID) SELECT MembershipID,userid,1000
FROM cs users WHERE userid NOT IN (SELECT userid FROM cs userprofile) 
&lt;/p&gt;
&lt;O:P&gt;&lt;/O:P&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Now able to log in &lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;Having tweaked the ApplicationID, imported my existing
users, created “everyone” role records for each and inserted records into the cs users
and cs userprofile tables, I was now able to log into CommunityServer using an account
from my existing web site. &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;Moving forward, I recognize that the CommunityServer
membership system will immediately become unsynchronized with my own. While I am considering
using the Asp.Net Forms Authentication module (possibly with some extra work on my
part) I am opposed to duplication of any type of information, especially user credentials. &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;In the meantime, I believe there are plenty of folks
that might wish to migrate existing membership data over to CommunityServer and thereafter
let CommunityServer handle user credential management. Hopefully, this article will
help. If anyone knows more or has insight on this subject, I invite your suggestions
and comments. &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;div&gt;
&lt;p class=MsoAutoSig&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Brian Mishler&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoAutoSig&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;a href="http://www.qualitydata.com/"&gt;http://www.qualitydata.com&lt;/a&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p class=MsoNormal&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://mishler.net/aggbug.ashx?id=827f1be1-d138-4d2d-92c1-e339bf16f950" /&gt;</description>
      <comments>http://mishler.net/CommentView,guid,827f1be1-d138-4d2d-92c1-e339bf16f950.aspx</comments>
      <category>CommunityServer</category>
    </item>
  </channel>
</rss>