Pergunta

Eu tenho um site ASP.NET que foi desenvolvido no .NET Framework V2 conectando ao SQL Server 2000. Estou tentando migrá -lo para um novo servidor que possui o .NET Framework v3.5, juntamente com o SQL Server 2008. Fiz o backup do banco de dados e o restaurei no novo servidor de banco de dados. Eu movi o site e atualizei o web.config. Agora, no entanto, não posso fazer login no site. Eu executei o SQL Profiler para ver o que estava acontecendo e este é o Proc armazenado que é executado quando tento fazer login.

exec dbo.aspnet_Membership_GetPasswordWithFormat @ApplicationName=N'dev',
@UserName=N'AffiliateBob', @UpdateLastLoginActivityDate=1,
@CurrentTimeUtc='2009-10-26 20:43:23.7130000'

Observe o formato do parâmetro @CurrentTimeUTC. Quando coloco isso no SQL Management Studio e executei a seguinte mensagem de erro.

Msg 8114, Level 16, State 1, Procedure aspnet_Membership_GetPasswordWithFormat, Line 0
Error converting data type varchar to datetime.

Aqui está a seção de associação do meu web.config.

<membership>
    <providers>
        <clear/>
        <add name="AspNetSqlMembershipProvider" 
                    type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
                    connectionStringName="LocalSqlServer" 
                    enablePasswordRetrieval="false" 
                    enablePasswordReset="true" 
                    requiresQuestionAndAnswer="false" 
                    requiresUniqueEmail="true" 
                    passwordFormat="Hashed" 
                    maxInvalidPasswordAttempts="999" 
                    minRequiredPasswordLength="6" 
                    minRequiredNonalphanumericCharacters="0" 
                    passwordAttemptWindow="999" 
                    passwordStrengthRegularExpression="" 
                    applicationName="dev"/>
    </providers>
</membership>
Foi útil?

Solução

Isso acabou sendo um web.config questão. Que eu resolvi criando um novo limpo web.config arquivar e adicionar seções do antigo web.config.

Outras dicas

Funciona ok se você alterar a data para 2009-10-10? Nesse caso, você tem um problema de idioma/localidade. O ASP.NET está enviando o parâmetro de data no MM/DD e o SQL Server está esperando DD/MM ou vice-versa. Verifique esta configuração no ASP.NET e para o seu login do SQL Server.

Esta pode não ser a melhor solução em alguns casos, mas isso acabou resolvendo meu problema:

http://forums.asp.net/t/1398826.aspx/1

Originalmente, eu tentei procurar o provedor de membros armazenado Procs e começar a mover todos os dados do DateTime para o DateTime2, mas tenho certeza de que você pode imaginar a lata de worms que se abre. De qualquer forma, o problema de conversão do DateTime é bom a saber.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top