我有一个用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;列会自动更新,我不需要做任何编码来设置这个值,或者我呢?谁能解释为什么它会在托管服务器上发生,而不是在我的本地机器上?我该怎么做才能解决它?
如果您需要更多信息,请告诉我,我可以添加它。
答案 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