错误:无法生成 SQL Server 的用户实例
Posted
技术标签:
【中文标题】错误:无法生成 SQL Server 的用户实例【英文标题】:Error: Failed to generate a user instance of SQL Server 【发布时间】:2008-11-11 17:07:59 【问题描述】:我正在尝试连接到 MDF。我什至不遗余力地重新安装了 sql server express(它现在是我的盒子上安装的唯一一种 SQL,以前我有 05 dev 和 express)。我已经验证了路径都是正确的,到目前为止我的 google-fu 没有帮助。
完整的异常消息是:
由于发生故障,未能生成 SQL Server 的用户实例 启动用户实例的进程。连接将是 关闭。
连接字符串是:
<add name= "CustomerEntities"
connectionString="metadata=res://*/Data.CustomerModel.csdl|res://*/Data.CustomerModel.ssdl|res://*/Data.CustomerModel.msl;
provider=System.Data.SqlClient;
provider connection string='Data Source=.\SQLEXPRESS;
AttachDbFilename=\App_Data\CustomerDb.mdf;
Integrated Security=True;
User Instance=True'"
providerName="System.Data.EntityClient" />
附加信息:
我在网上找到的一些关于此错误的引用不适用于我。例如,我看到的一个错误是在尝试通过远程桌面启动用户实例时发生此错误(我在本地执行此操作)。而另一个建议它与旧快速安装的剩余文件有关......我查看了规定的位置并没有找到那些工件。我也试过运行sp_configure 'user instances enabled', '1'
,但它说它已经设置为1。
【问题讨论】:
【参考方案1】:好的,现在可以了!猜这是一个复合问题......我为解决它所采取的步骤是这样的:
-
更改了连接字符串中的以下属性(注意细微差别):
AttachDbFilename=|DataDirectory|CustomerDb.mdf;
删除了以下目录的内容:c:\Users\<user name>\AppData\Local\Microsoft\Microsoft SQL Server Data\SQLEXPRESS
。我以为我以前找过这个,但实际上我查看了Microsoft Sql Server
文件夹。同样,细微的差别。
一旦我做了这两件事,连接就开始工作了:-D
【讨论】:
超棒的。这对我也有用!我搜索了几篇文章,不知何故他们都弄错了路径。重要的部分是用户文件夹中的 AppData。谢谢你让我免于发疯! 这篇文章作为“实体框架”出现在结果中毫无价值。我正在使用 LINQ to SQL(不是实体框架),并升级到 SQL Server Express R2,第 2 步解决了我的问题。升级后,我的 Visual Studio 项目都无法连接到 SQL Express,直到执行此修复。特定的框架无关紧要——它似乎是一个通用的 SQL Server Express 问题。谢谢! 当我发现这个时,我实际上正要进行干净的 Windows 安装,#2 让我全部修复,谢谢 Joel。 在 #2 上也是如此 - 锻炼了一些旧的 MS voo-doo。 我做了 #2,现在我收到以下错误:“与 SQL Server 建立连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。验证实例名称正确且 SQL Server 配置为允许远程连接。(提供者:SQL 网络接口,错误:26 - 错误定位服务器/指定实例)”。我什至不能再从 SSMS 访问 SQL 服务器了……真的很后悔现在尝试这个。【参考方案2】:当我将代码从一台机器移动到另一台机器时,我遇到了同样的错误。我正在使用 VS2010 和 SQLEXPRESS 2008 附带它。
技巧,从以下文件夹“C:\Users\UserName\AppData\Local\Microsoft\Microsoft SQL Server Data\SQLEXPRESS”中删除所有内容对我有用。
【讨论】:
很确定这个文件夹有来自旧版本 sql express 的文件。 谢谢。这为我节省了一天时间。【参考方案3】:尽管上面的答案解决了很多人的问题,但我仍然发现这些没有解决问题的本质。最接近它的是上面@sohaiby 的答案。但它错误地指的是使用 Management Studio。
此主题顶部的错误消息非常清楚地表明问题在于生成用户实例。这里详细描述了实例是什么以及如何使用它: https://msdn.microsoft.com/en-us/library/ms254504(v=vs.110).aspx
就个人而言,我在将数据库连接从 Windows 身份验证模式切换到 SQL Server 身份验证时遇到了这个问题。我通过将连接字符串的一部分修改为:“User Instance=false;”而不是“User Instance=true;”来解决它,这与 Windows 身份验证配合得很好。
在我更改为“User Instance=false;”之后我的连接工作正常,没有任何额外的操作。我不能坚持认为它会起作用或适用于所有场景。但是,我肯定会建议在上述其他极端方法之前尝试它,例如擦除 SQL Server 工作目录。
【讨论】:
这应该是标记的答案。【参考方案4】:除了这里的其他解决方案,这个也可能会有所帮助。 确保应用程序池作为网络服务运行,而不是 ApplicationPoolIdentity。
在此处找到此解决方案:http://blogs.msdn.com/b/webdevelopertips/archive/2010/05/06/tip-106-did-you-know-how-to-create-the-aspnetdb-mdf-file.aspx
【讨论】:
【参考方案5】:正如其他人所说,删除目录的内容:c:\Users\\AppData\Local\Microsoft\Microsoft SQL Server Data\SQLEXPRESS 为我解决了这个问题。可能有助于其他人的注释,在 Windows 7 上,从文档浏览器浏览 c:\users\username 目录并没有显示 AppData 文件夹,这让我暂时离开(因为我认为我没有 AppData 目录)直到我发现它确实存在(但在 Windows 7 的文档浏览器中没有显示),您只需输入完整路径名即可访问它。
【讨论】:
它只是隐藏的朋友,转到工具 -> 显示隐藏的文件和文件夹将起作用【参考方案6】:我在 Windows 窗体应用程序中使用我的 mdf 文件解决了这个问题,我只是重新启动计算机,我的问题就解决了。
【讨论】:
【参考方案7】:只需转到 web.config 文件。将 'Connection String'="....../.../......?.......; User Instance=True'" 更改为 ". ...../.../......?.......; 用户实例=False'"
是的,这可能会导致一些安全问题,但对于一些学校/学院的实际项目(我的情况),这可以运行您的项目。
在 web.config
中从 User Instance=True 更改为 User Instance=False ,【讨论】:
【参考方案8】:我在使用 SqlLocalDB 和 SqlExpress 时遇到了这个问题。 问题原因: 当我从 Visual Studio 连接到 localdb 时,会为其启动一个 LocalDB 实例并作为我们的 Windows 帐户运行。但是,当在 IIS 中作为“网络服务”或“AppPoolIdentity”运行的 Web 应用程序连接到 LocalDB 时,会为其启动另一个 LocalDB 实例并作为“网络服务”或“AppPoolIdentity”运行。因此,即使 Visual Studio 和 Web 应用程序都使用相同的 LocalDB 连接字符串,它们也会连接到不同的 LocalDB 实例。显然,在我们的 LocalDB 实例上从 Visual Studio 创建的数据库在 Web 应用程序的 LocalDB 实例中将不可用。 解决方案: 所以,在这里我列出了这两种情况的解决方案(即 SqlExpress 和 LocalDB 如果我们使用 LocalDB 作为数据源:
-
将应用程序池标识设置为“网络服务”
更新 applicationHost.config 文件以包含以下突出显示的设置:
-
通过在管理员模式下在 CMD.exe 中运行以下命令将 SqlLocalDB 更改为共享实例
SqlLocalDB.exe 共享“MyLocalDB”“MySharedLocalDB”
(这里“MyLocalDB”是我的本地数据库实例。您可以通过在管理员模式下在 CMD.exe 中执行以下命令来找到相同的 SqlLocalDB.exe) 因此,我的连接字符串如下:
-
由于我在 IIS 中托管应用程序,因此我确保帐户 “NT AUTHORITY\NETWORK SERVICE” 具有对应用程序根文件夹的读/写访问权限以避免“访问被拒绝”异常并启用作为系统管理员的帐户通过执行以下 SQL 查询来访问 SqlInstance
exec sp_addsrvrolemember 'NT AUTHORITY\NETWORK SERVICE', sysadmin
如果我们使用 SqlExpress 作为数据源:
1.确保连接字符串具有正确的值,如下所示: \AppData\Local\Microsoft\Microsoft SQL Server Data\SQLEXPRESS中的旧文件
【讨论】:
【参考方案9】:我今天早上在测试部署环境中开始收到此错误。我使用的是 SQL Server Express 2008,我得到的错误是
“由于启动用户实例的进程失败,无法生成 SQL Server 的用户实例。连接将被关闭。”
不确定是什么原因造成的,我按照这篇文章和其他关于 删除“C:\Users\UserName\AppData\Local\Microsoft\Microsoft SQL Server Data\SQLEXPRESS”目录,但无济于事。
对我来说,诀窍是改变连接字符串
"Data Source=.\SQLExpress;Initial Catalog=DBFilePath;Integrated Security=SSPI;MultipleActiveResultSets=true"
到
"Data Source=.\SQLExpress;Initial Catalog=DBName;Integrated Security=SSPI;MultipleActiveResultSets=true"
【讨论】:
【参考方案10】:要解决此问题,请打开 SQL Server Management Studio Express。 在查询编辑器中输入以下文本:
sp_configure 'user instances enabled', 1;
RECONFIGURE
运行它。 然后重新启动 SQL Server 数据库。
【讨论】:
如果没有生成sql server 实例,怎么打开Management Studio?【参考方案11】:您是否尝试使用 SQL Management Studio 连接到 SQL Server 实例?
如果这也不允许您连接,则可能是因为 SQL 服务未正确启动。
通过检查控制面板中的服务来验证服务是否正在运行。
【讨论】:
以上是关于错误:无法生成 SQL Server 的用户实例的主要内容,如果未能解决你的问题,请参考以下文章
由于启动用户实例的进程失败,无法生成 SQL Server 的用户实例。连接将关闭
SQL Server 服务器主体拥有一个或多个端点无法删除;错误15141
信息:无法打开物理文件“路径”。操作错误5:“5(拒绝访问。)”(MICROSOFT SQL Server,错误:5120)
在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法訪问server。请验证实例名称是否正确而且 SQL Server 已配置为同意远程连接。