尝试更新用户配置文件会抛出MySqlException:column' lastUpdatedDate'不能为NULL

时间:2014-11-26 14:55:43

标签: c# mysql asp.net

我有一个用asp.net c#编写的Web服务应用程序和一个MySQL数据库。我正在使用MySQL提供程序(v6.9.4.0)来获取成员资格,角色和配置文件。对于个人资料,我使用它来存储7个属性,名称,公司等。

到目前为止,我能够很好地连接和访问数据库,读取所有用户和所有其他信息。我可以创建用户帐户并删除它们而没有任何问题,并且所有配置文件属性都正确保存在' my_aspnet_profiles'表。

但是,当我尝试更改现有帐户的某些属性时,会出现以下异常(包括堆栈跟踪):

  

System.Web.HttpUnhandledException(0x80004005):类型' System.Web.HttpUnhandledException'的异常。被扔了。 ---> System.Configuration.Provider.ProviderException:配置文件更新失败。 ---> MySql.Data.MySqlClient.MySqlException:Column' lastUpdatedDate'不能为空

   at MySql.Data.MySqlClient.MySqlStream.ReadPacket()
   at MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId)
   at MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int64& insertedId)
   at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force)
   at MySql.Data.MySqlClient.MySqlDataReader.NextResult()
   at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
   at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader()
   at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()
   at MySql.Web.Profile.MySQLProfileProvider.SetPropertyValues(SettingsContext context, SettingsPropertyValueCollection collection)
   --- End of inner exception stack trace ---
   at MySql.Web.Profile.MySQLProfileProvider.SetPropertyValues(SettingsContext context, SettingsPropertyValueCollection collection)
   at System.Configuration.SettingsBase.SaveCore()
   at System.Configuration.SettingsBase.Save()
   at System.Web.Profile.ProfileBase.SaveWithAssert()
   at System.Web.Profile.ProfileBase.Save()
   at Cylon.QuoteEngine.Application.Web.AccountManager.SaveUserProfile(String username, CylonProfile customProfile) in C:\Work\Web\AccountManager.cs:line 86

当我使用托管在我本地计算机上的MySQL实例时,这是有效的,但是当我尝试使用托管在服务器上的数据库运行应用程序时,我得到了异常。

以下是我尝试保存用户个人资料的地方:

public void SaveUserProfile(string username, CylonProfile customProfile)
    {
        var profile = ProfileBase.Create(username);
        profile.SetPropertyValue("Name", customProfile.Name);
        profile.SetPropertyValue("Company", customProfile.Company);
        ...

        profile.Save();
    }

在我的web.config文件中,提供程序声明为:

的MembershipProvider:

<membership defaultProvider="MySqlMembershipProvider">
  <providers>
    <clear />
    <add name="MySqlMembershipProvider" type="MySql.Web.Security.MySQLMembershipProvider, MySql.Web,Version=6.9.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="ApplicationServices" enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" passwordFormat="Encrypted" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" autogenerateschema="true" /> 
  </providers>
</membership>

ProfileProvider:

<profile enabled="true" defaultProvider="MySqlProfileProvider">
  <properties>
    <add name="Name" type="String" />
    <add name="Company" type="String" />
    ...
  </properties>
  <providers>
    <clear />
    <add name="MySQLProfileProvider" type="MySql.Web.Profile.MySQLProfileProvider, MySql.Web, Version=6.9.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" connectionStringName="ApplicationServices" autogenerateschema="True" description="" writeExceptionsToEventLog="False" enableExpireCallback="False" />
  </providers>
</profile>

RoleProvider:

<roleManager enabled="true" defaultProvider="MySqlRoleProvider">
  <providers>
    <clear />
    <add connectionStringName="ApplicationServices" applicationName="/" name="MySqlRoleProvider" type="MySql.Web.Security.MySQLRoleProvider, MySql.Web,Version=6.9.4.0, Culture=neutral,PublicKeyToken=c5687fc88969c44d" autogenerateschema="true" />
  </providers>
</roleManager>

我假设&#39; lastUpdatedDate&#39;列会自动更新,我不需要做任何编码来设置这个值,或者我呢?谁能解释为什么它会在托管服务器上发生,而不是在我的本地机器上?我该怎么做才能解决它?

如果您需要更多信息,请告诉我,我可以添加它。

1 个答案:

答案 0 :(得分:3)

抱歉没有足够的声誉评论,但你可以看看这里,它看起来相关: How do you set a default value for a MySQL Datetime column?

<强>更新
可能与MySql v5.6.19 bugs.mysql.com/bug.php?id=68472中的错误有关 如果select @@explicit_defaults_for_timestamp;返回1,请尝试将my.ini文件中的值更改为0 该文件通常位于C:\ Program Files \ MySQL \ MySQL Server x.xx \ my.ini