C# SetPropertyValue期间CreateUserWizard出错:无法连接到SQL Server数据库
我有一个ASP.NET应用程序,它通常可以连接数据库,可以使用CreateUserWizard创建用户,但在用户配置文件更新期间开始使用我坚持使用的配置文件,例外情况如下: [SqlException(0x80131904):用户“我的电脑\用户”登录失败。]C# SetPropertyValue期间CreateUserWizard出错:无法连接到SQL Server数据库,c#,asp.net,sql-server,asp.net-profiles,createuserwizard,C#,Asp.net,Sql Server,Asp.net Profiles,Createuserwizard,我有一个ASP.NET应用程序,它通常可以连接数据库,可以使用CreateUserWizard创建用户,但在用户配置文件更新期间开始使用我坚持使用的配置文件,例外情况如下: [SqlException(0x80131904):用户“我的电脑\用户”登录失败。] [HttpException(0x80004005):无法连接到SQL Server数据库。] 我确信以下各项: 连接字符串正常,应用程序可以访问数据库 如果我不想更新他们的配置文件,则在数据库中使用CreateUserWizard创建用
[HttpException(0x80004005):无法连接到SQL Server数据库。] 我确信以下各项:
this.SetPropertyValue(“FirstName”,value)时代码>一切都出错,下面显示错误:
SQLExpress数据库文件自动创建错误:
连接字符串使用应用程序的App_数据目录中的数据库位置指定本地Sql Server Express实例。提供程序试图自动创建应用程序服务数据库,因为提供程序确定该数据库不存在。要成功检查application services数据库是否存在并自动创建application services数据库,必须满足以下配置要求:
如果应用程序在Windows 7或Windows Server 2008R2上运行,则需要执行特殊的配置步骤以启用提供程序数据库的自动创建。有关其他信息,请访问:。如果应用程序的App_数据目录不存在,则web服务器帐户必须具有对应用程序目录的读写访问权限。这是必要的,因为如果App_数据目录不存在,web服务器帐户将自动创建该目录
如果应用程序的App_数据目录已存在,则web服务器帐户只需要对应用程序的App_数据目录进行读写访问。这是必需的,因为web服务器帐户将尝试验证Sql server Express数据库是否已存在于应用程序的App_数据目录中。从web服务器帐户撤消对App_数据目录的读取访问将阻止提供程序正确确定Sql server Express数据库是否已存在。当提供程序尝试创建现有数据库的副本时,这将导致错误。由于在创建新数据库时使用web服务器帐户的凭据,因此需要具有写访问权限
必须在计算机上安装Sql Server Express。
web服务器帐户的进程标识必须具有本地用户配置文件。有关如何为计算机帐户和域帐户创建本地用户配置文件的详细信息,请参阅自述文件
下面是web.config
:
<configuration>
<connectionStrings>
<add name="MUQ_SMSConnectionString"
connectionString="Data Source=MY-PC\SQLEXPRESS12SP1;Initial Catalog=MyDB;"
providerName="System.Data.SqlClient;Integrated Security=True"/>
</connectionStrings>
............
</configuration>
以下是配置文件的定义和默认提供程序的覆盖:
<membership defaultProvider="MySqlProvider" >
<providers>
<add name="MySqlProvider"
type="System.Web.Security.SqlMembershipProvider"
applicationName="/"
connectionStringName="MUQ_SMSConnectionString"
requiresUniqueEmail="False"
requiresQuestionAndAnswer="false" />
</providers>
</membership>
<anonymousIdentification enabled="true" />
<profile enabled="true">
<properties>
<add name="MobileNumber" type="string" allowAnonymous="true"/>
<add name="FirstName" type="string" allowAnonymous="true"/>
<add name="LastName" type="string" allowAnonymous="true"/>
<add name="Gender" type="string" allowAnonymous="true"/>
</properties>
</profile>
<roleManager enabled="true"/>
注意:我有另一个问题,我怀疑它可能与此错误有关。当我想在应用程序的“管理”面板中编辑应用程序的安全选项时,SQL Server会崩溃,并在windows中报告错误
目前我正在Windows 8.1上使用SQL Server 2012SP1 Express。我安装了SQL Server 2008 R2 Express,然后安装了2012 Express,但没有任何更改。当您使用AspDotNetProfile提供程序而未在web.config文件中提供提供提供程序配置时,您使用的是machine.config文件中的提供程序配置。以下是与.NET 4.0一起分发的默认machine.config文件的示例:
<profile>
<providers>
<add name="AspNetSqlProfileProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</profile>
此定义中引用的连接字符串也可以在machine.config中找到:
<connectionStrings>
<add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
</connectionStrings>
从您的问题中可以看出,您尚未覆盖web.config中的默认配置文件定义。因此,配置文件提供程序正在本地计算机上查找名为SQLEXPRESS的SQL Server Express实例。原因是必须是Express实例,因为只有Express版本才支持用户实例(有关AttachDBFilename,请参阅文档)
因此,您有两个选择:
1.覆盖默认的提供程序配置。这可以通过删除默认配置并重新添加具有相同名称的配置来完成。
2.在web服务器上设置具有默认实例名称的SQL Server Express实例。如果使用AspDotNetProfile提供程序而未在web.config文件中提供提供提供程序配置,则使用machine.config文件中的提供程序配置。以下是与.NET 4.0一起分发的默认machine.config文件的示例:
<profile>
<providers>
<add name="AspNetSqlProfileProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</profile>
此定义中引用的连接字符串也可以在machine.config中找到:
<connectionStrings>
<add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
</connectionStrings>
从您的问题中可以看出,您尚未覆盖web.config中的默认配置文件定义。因此,配置文件提供程序正在本地计算机上查找名为SQLEXPRESS的SQL Server Express实例。原因是必须是Express实例,因为只有Express版本才支持用户实例(有关AttachDBFilename,请参阅文档)
因此,您有两个选择:
1.覆盖默认的提供程序配置。这可以通过删除默认配置并重新添加具有相同名称的配置来完成。
2.在web服务器上设置具有默认实例名称的SQL Server Express实例。如果使用AspDotNetProfile提供程序而未在web.config文件中提供提供提供程序配置,则使用machine.config文件中的提供程序配置。以下是与.NET 4.0一起分发的默认machine.config文件的示例:
<profile>
<providers>
<add name="AspNetSqlProfileProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</profile>