繁体   English   中英

C#MySQL Simm Membership Provider

[英]C# MySQL SImple Membership Provider

我正在使用Microsoft Visual Studio 2015(社区版)构建一个简单的c#Web应用程序(NOT MVC)。 我的数据库是MySQL的最新版本,我安装的MySQL连接器也是最新版本。

我已经修改了Web.config文件,以将WebMatrix简单成员资格提供程序与MySQL一起使用。

这是我的Web.config文件:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <sectionGroup name="dotNetOpenAuth" type="DotNetOpenAuth.Configuration.DotNetOpenAuthSection, DotNetOpenAuth.Core">
      <section name="messaging" type="DotNetOpenAuth.Configuration.MessagingElement, DotNetOpenAuth.Core" requirePermission="false" allowLocation="true" />
      <section name="reporting" type="DotNetOpenAuth.Configuration.ReportingElement, DotNetOpenAuth.Core" requirePermission="false" allowLocation="true" />
      <section name="oauth" type="DotNetOpenAuth.Configuration.OAuthElement, DotNetOpenAuth.OAuth" requirePermission="false" allowLocation="true" />
      <section name="openid" type="DotNetOpenAuth.Configuration.OpenIdElement, DotNetOpenAuth.OpenId" requirePermission="false" allowLocation="true" />
    </sectionGroup>
  </configSections>
  <system.web>
    <compilation debug="true" targetFramework="4.5.2">
      <assemblies>
        <add assembly="MySql.Data, Version=6.9.8.0, Culture=neutral, PublicKeyToken=C5687FC88969C44D" />
        <add assembly="MySql.Web, Version=6.9.8.0, Culture=neutral, PublicKeyToken=C5687FC88969C44D" />
      </assemblies>
    </compilation>
    <httpRuntime targetFramework="4.5.2" />
    <membership defaultProvider="SimpleMembershipProvider">
      <providers>
        <clear />
        <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
      </providers>
    </membership>
    <profile defaultProvider="MySQLProfileProvider">
      <providers>
        <remove name="MySQLProfileProvider" />
        <add name="MySQLProfileProvider" type="MySql.Web.Profile.MySQLProfileProvider, MySql.Web, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" applicationName="/" />
      </providers>
    </profile>
    <roleManager enabled="true" defaultProvider="SimpleRoleProvider">
      <providers>
        <clear/>
        <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData" />
      </providers>
    </roleManager>
    <machineKey validationKey="AutoGenerate" validation="SHA1"/>
    <siteMap defaultProvider="MySqlSiteMapProvider">
      <providers>
        <remove name="MySqlSiteMapProvider" />
        <add name="MySqlSiteMapProvider" type="MySql.Web.SiteMap.MySqlSiteMapProvider, MySql.Web, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" applicationName="/" />
      </providers>
    </siteMap>
    <webParts>
      <personalization defaultProvider="MySQLPersonalizationProvider">
        <providers>
          <remove name="MySQLPersonalizationProvider" />
          <add name="MySQLPersonalizationProvider" type="MySql.Web.Personalization.MySqlPersonalizationProvider, MySql.Web, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" applicationName="/" />
        </providers>
      </personalization>
    </webParts>
    <sessionState mode="InProc" customProvider="DefaultSessionProvider">
      <providers>
        <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
      </providers>
    </sessionState>
    <customErrors mode="Off" />
    <trust level="Full" />
  </system.web>
  <connectionStrings>
    <remove name="LocalMySqlServer"/>
    <add name="RP" connectionString="Server=localhost; Database=my_db; uid=my_uid; pwd=my_password;" providerName="MySql.Data.MySqlClient"/>
  </connectionStrings>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" />
        <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" />
        <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebMatrix.WebData" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
    <!-- This prevents the Windows Event Log from frequently logging that HMAC1 is being used (when the other party needs it). -->
    <legacyHMACWarning enabled="0" />
    <!-- When targeting ASP.NET MVC 3, this assemblyBinding makes MVC 1 and 2 references relink
         to MVC 3 so libraries such as DotNetOpenAuth that compile against MVC 1 will work with it.
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
     -->
  </runtime>
  <system.data>
    <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient" />
      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </providers>
  </entityFramework>
  <system.net>
    <defaultProxy enabled="true" />
    <settings>
      <!-- This setting causes .NET to check certificate revocation lists (CRL) 
           before trusting HTTPS certificates.  But this setting tends to not 
           be allowed in shared hosting environments. -->
      <!--<servicePointManager checkCertificateRevocationList="true"/>-->
    </settings>
  </system.net>
  <dotNetOpenAuth>
    <messaging>
      <untrustedWebRequest>
        <whitelistHosts>
          <!-- Uncomment to enable communication with localhost (should generally not activate in production!) -->
          <!--<add name="localhost" />-->
        </whitelistHosts>
      </untrustedWebRequest>
    </messaging>
    <!-- Allow DotNetOpenAuth to publish usage statistics to library authors to improve the library. -->
    <reporting enabled="true" />
    <!-- This is an optional configuration section where aspects of dotnetopenauth can be customized. -->
    <!-- For a complete set of configuration options see http://www.dotnetopenauth.net/developers/code-snippets/configuration-options/ -->
    <openid>
      <relyingParty>
        <security requireSsl="false">
          <!-- Uncomment the trustedProviders tag if your relying party should only accept positive assertions from a closed set of OpenID Providers. -->
          <!--<trustedProviders rejectAssertionsFromUntrustedProviders="true">
            <add endpoint="https://www.google.com/accounts/o8/ud" />
          </trustedProviders>-->
        </security>
        <behaviors>
          <!-- The following OPTIONAL behavior allows RPs to use SREG only, but be compatible
               with OPs that use Attribute Exchange (in various formats). -->
          <add type="DotNetOpenAuth.OpenId.RelyingParty.Behaviors.AXFetchAsSregTransform, DotNetOpenAuth.OpenId.RelyingParty" />
        </behaviors>
      </relyingParty>
    </openid>
  </dotNetOpenAuth>
  <uri>
    <!-- The uri section is necessary to turn on .NET 3.5 support for IDN (international domain names),
         which is necessary for OpenID urls with unicode characters in the domain/host name.
         It is also required to put the Uri class into RFC 3986 escaping mode, which OpenID and OAuth require. -->
    <idn enabled="All" />
    <iriParsing enabled="true" />
  </uri>
</configuration>

简单的成员资格提供程序已设置为自动创建其成功完成的成员资格数据库表。

我可以从数据库中选择数据并显示。

但是,当我注册用户(使用由简单会员资格提供程序自动创建的网页)时,出现错误。

默认情况下,通过关联的简单提供程序将成员资格数据写入两个表:一个用户配置文件表和一个webpages_membership表。

当我点击“提交”按钮时,数据已正确写入到用户配置文件表中,但是在将数据写入到webpages_membership表中时出现此错误:

 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[UserId] FROM [UserProfile] WHERE (UPPER([Email]) = UPPER('brian@myurl.com')' at line 1

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: MySql.Data.MySqlClient.MySqlException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[UserId] FROM [UserProfile] WHERE (UPPER([Email]) = UPPER('brian@robeyspub.com')' at line 1

Source Error: 


Line 50:                 {
Line 51:                     bool requireEmailConfirmation = !WebMail.SmtpServer.IsEmpty();
Line 52:                     var token = WebSecurity.CreateAccount(email, password, requireEmailConfirmation);
Line 53:                     if (requireEmailConfirmation)
Line 54:                     {

Source File: c:\Users\brian\OneDrive\Documents\Visual Studio 2015\Projects\Robey's Pub VS2015 Razor\Account\Register.cshtml    Line: 52 

Stack Trace: 


[MySqlException (0x80004005): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[UserId] FROM [UserProfile] WHERE (UPPER([Email]) = UPPER('brian@robeyspub.com')' at line 1]
   MySql.Data.MySqlClient.MySqlStream.ReadPacket() +272
   MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId) +68
   MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int64& insertedId) +17
   MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force) +110
   MySql.Data.MySqlClient.MySqlDataReader.NextResult() +783
   MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) +1564
   MySql.Data.MySqlClient.MySqlCommand.ExecuteScalar() +112
   WebMatrix.Data.Database.QueryValue(String commandText, Object[] args) +98
   WebMatrix.WebData.DatabaseWrapper.QueryValue(String commandText, Object[] parameters) +29
   WebMatrix.WebData.SimpleMembershipProvider.GetUserId(IDatabase db, String userTableName, String userNameColumn, String userIdColumn, SimpleMembershipProviderCasingBehavior casingBehavior, String userName) +217
   WebMatrix.WebData.SimpleMembershipProvider.CreateAccount(String userName, String password, Boolean requireConfirmationToken) +158
   WebMatrix.WebData.WebSecurity.CreateAccount(String userName, String password, Boolean requireConfirmationToken) +51
   ASP._Page_Account_Register_cshtml.Execute() in c:\Users\brian\OneDrive\Documents\Visual Studio 2015\Projects\Robey's Pub VS2015 Razor\Account\Register.cshtml:52
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +177
   System.Web.WebPages.WebPage.ExecutePageHierarchy(IEnumerable`1 executors) +83
   System.Web.WebPages.WebPage.ExecutePageHierarchy() +103
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +101
   System.Web.WebPages.WebPageHttpHandler.ProcessRequestInternal(HttpContextBase httpContext) +110

我无法弄清楚如何解决这个问题。 任何帮助赞赏。 谢谢!


更多信息;

此语句(这是由计算机自动生成的语句,由简单成员资格提供程序创建)上的程序错误:

var token = WebSecurity.CreateAccount(电子邮件,密码,requireEmailConfirmation);

错误详细信息如下:


 MySql.Data.MySqlClient.MySqlException was unhandled by user code   ErrorCode=-2147467259   

的HResult = -2147467259
Message =您的SQL语法有误; 请查看与您的MySQL服务器版本相对应的手册,以获取正确的语法,以在第1行“ [UserId] FROM [UserProfile] WHERE(UPPER([Email])= UPPER('brian@robeyspub.com')”附近使用= 1064
来源= MySql.Data

StackTrace:位于MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId,Int32&受影响的行,Int64&insertId)的MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& )的MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior行为)的MySql.Data.MySqlClient.MySqlDataReader.NextResult()的MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId,Boolean force) WebMatrix.WebData.Database.QueryValue(.WebData.DataDataBaseWrapper.QueryValue(String commandText,.Object []参数)处的WebMatrix.Data.Database.QueryValue(String commandText,Object [] args)处的WebSql.WebData.SimpleMembershipProvider.GetUserId(IDatabase) db,WebMatrix.WebData.SimpleMembershipProvider.CreateAccount(String userName,String password,Boolean requireC)上的db,String userTableName,String userNameColumn,String userIdColumn,SimpleMembershipProviderCasingBehavior框体行为,String userName) WebMatrix.WebData.WebSecurity.CreateAccount上的onfirmationToken)(String userName,String password,Boolean requireConfirmationToken)在c:\\ Users \\ brian \\ OneDrive \\ Documents \\ Visual Studio 2015 \\ Projects \\ Robey's Pub VS2015 Razor的ASP._Page_Account_Register_cshtml.Execute() \\ Account \\ Register.cshtml:第52行,位于System.Web.WebPages.WebPageBase.ExecutePageHierarchy(),位于System.Web.WebPages.WebPage.ExecutePageHierarchy(IEnumerable`1执行者),位于System.Web.WebPages.WebPage.ExecutePageHierarchy() System.Web.WebPages.WebPageHttpHandler.ProcessRequestInternal(HttpContextBase httpContext)上的System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext,TextWriter writer,WebPageRenderingBase startPage)

InnerException:

您的查询有误,请在[[UserProfile] FROM [UserProfile] WHERE(UPPER([Email])= UPPER('brian@robeyspub.com')'中检查一次查询

检查您是否使用单引号,以便

这是'[UserId] FROM [UserProfile] WHERE(UPPER([Email])= UPPER('这将是第一个字符串,而第二个是')'

但是什么系统解释了brian@robeyspub.com

使用调试器做一件事,检查您的查询并将其运行到mysql中,您将得到正在得到的错误

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM