首页 文章

MSSQL错误'The underlying provider failed on Open'

提问于
浏览
193

我使用 .mdf 连接 databaseentityClient . 现在我想更改连接字符串,以便不会有 .mdf 文件 .

以下 connectionString 是否正确?

<connectionStrings>
   <!--<add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQL2008;AttachDbFilename=|DataDirectory|\NData.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />-->
   <add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQL2008;Initial Catalog=NData;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

因为我总是得到错误:

基础提供程序在Open上失败

30 回答

  • 12

    对我来说这只是一个简单的错误:

    我使用Amazon EC2,我在连接字符串中使用了弹性IP地址,但是当我更改IP地址时,我忘了更新连接字符串 .

  • 6

    我突然在我们的一个网站上发生了这个错误 . 在我的情况下,事实证明SQL用户的密码已过期!在SQL Server Management Studio中取消密码到期框就行了!

  • 0

    我遇到了类似的问题:在我的测试用例执行中,我总是遇到这个错误 . 我发现,我的“分布式事务服务”没有启动(运行:services.msc - >启动“分布式事务服务”(最好将其设置为自动启动)) . 在我这样做之后,它就像一个魅力......

  • 0

    我将数据库文件(.mdf / .ldf)复制到App_Data文件夹以摆脱此异常 .

  • 0

    我也面临同样的问题 . 现在我通过从连接字符串中删除用户名和密码来完成它 .

  • 0

    我做的一个常见错误,因为我将应用程序从一台PC移动到另一台,而上述工作都没有,我忘了将连接字符串复制到App.Config和Web.Config!

  • 1

    我有一个与内部异常类似的错误,如下所示:

    操作对交易状态无效

    我可以通过启用DTC安全设置来解决它 .

    转到DTC的属性,在安全选项卡下,检查以下内容

    • 网络DTC访问

    • 允许RemoteClients

    • 事务管理器通信

    • 允许入站

    • 允许出站

  • 0

    如果您碰巧在ASP.NET Web应用程序上遇到此错误,除了提到的其他内容之外,请检查以下内容:

    • 数据库用户安全权限(允许哪些用户访问您的数据库 .

    • 检查IIS中的应用程序池,确保它是允许访问数据库的正确应用程序池 .

  • 36

    我通过重置IIS摆脱了这一点,但仍然在连接字符串中使用 Integrated Authentication .

  • 0

    在服务器计算机上为SQL Server(以及端口1433)定义新的Windows Firewall规则可以解决此错误(如果您的服务器名,用户登录名或密码在连接字符串中没有错误...) .

  • 10

    我有同样的问题,但对我有用的是从连接字符串中删除它:

    persist security info=True

  • 196

    我有这个错误,并找到了一些解决方案:

    查看连接字符串,它看起来有效 . 我找到this blog post,这里的问题是他们正在使用Integrated Security . 如果您在IIS上运行,则IIS用户需要访问该数据库 .

    如果您使用的是Entity Framework with Transactions,则实体框架会自动打开并关闭与每个数据库调用的连接 . 因此,在使用事务时,您试图通过多个连接传播事务 . 这提升到MSDTC .

    See this reference for more information.

    将我的代码更改为以下修复它:

    using (DatabaseEntities context = new DatabaseEntities())
    {
        context.Connection.Open();
        // the rest
    }
    
  • 1

    context.Connection.Open() 没有帮助解决我的问题所以我尝试在DTC配置中启用"Allow Remote Clients",没有更多的错误 .

    在Windows 7中,您可以通过运行dcomcnfg,组件服务 - >计算机 - >我的电脑 - >分布式事务处理协调器 - >右键单击本地DTC - >安全性来打开DTC配置 .

  • 22

    我发现问题是我在其中一个变体中的连接字符串中有服务器路径:

    SERVER\SQLEXPRESS
    SERVER
    

    我什么时候应该:

    .\SQLEXPRESS
    

    出于某种原因,只要找不到SQL实例,我就会收到错误 .

  • 0

    您应该看到 innerException 以查看抛出错误的内在原因是什么 .

    在我的情况下,原始错误是:

    无法打开物理文件“D:\ Projects2 \ xCU \ xCU \ App_Data \ xCUData_log.ldf” . 操作系统错误5:“5(访问被拒绝 . )” . 尝试为文件D:\ Projects2 \ xCU \ xCU \ App_Data \ xCUData.mdf附加自动命名的数据库失败 . 存在具有相同名称的数据库,或者无法打开指定的文件,或者它位于UNC共享上 .

    通过向当前用户授予使用文件属性访问相关 mdfldf 文件的完全权限来解决此问题 .

  • 0

    这只是常见问题 . 即使我遇到过这个问题 . 在配置了Windows身份验证的开发计算机上,它完美地运行:

    <add name="ShoppingCartAdminEntities" connectionString="metadata=res://*/ShoppingCartAPIModel.csdl|res://*/ShoppingCartAPIModel.ssdl|res://*/ShoppingCartAPIModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQlExpress;initial catalog=ShoppingCartAdmin;Integrated Security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    

    一旦在具有相同配置的IIS中托管,我就会收到此错误:

    基础提供程序在Open上失败

    解决了在配置文件中更改 connectionString 的问题:

    <add name="MyEntities" connectionString="metadata=res://*/ShoppingCartAPIModel.csdl|res://*/ShoppingCartAPIModel.ssdl|res://*/ShoppingCartAPIModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MACHINE_Name\SQlExpress;initial catalog=ShoppingCartAdmin;persist security info=True;user id=sa;password=notmyrealpassword;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    

    其他常见错误可能是:

    • 数据库服务可以停止

    • 数据源属性指向具有Windows身份验证并在IIS中托管的本地数据库

    • 用户名和密码可能有误 .

  • 3

    当您收到此异常时,请确保展开详细信息并查看内部异常详细信息,因为它将提供有关登录失败原因的详细信息 . 在我的情况下,连接字符串包含一个无权访问我的数据库的用户 .

    无论您使用集成安全性(登录的Windows用户的上下文)还是单个SQL帐户,请确保用户在您尝试访问的数据库的“安全”下具有适当的访问权限以防止出现此问题 .

  • 0

    我在Windows Server 2003上的SQL Server Express Edition也有类似的问题 . 我只是将网络服务作为用户添加到数据库安全性中 .

  • 0

    如果还原数据库并且用户已存在具有不同架构的情况,也会发生这种情况,从而无法分配正确的权限 .

    要纠正此运行:

    USE your_database
    EXEC sp_change_users_login 'Auto_Fix', 'user', NULL, 'cf'
    GO
    EXEC sp_change_users_login 'update_one', 'user', 'user'
    GO
    
  • 3

    SQL Server Express服务未自动设置为tostart .

    1)转到控制面板2)管理工具3)服务4)设置SQL Server Express通过单击自动启动5)右键单击并启动服务

    我希望这会有所帮助 .

  • 22

    确保提供的连接字符串中的每个元素值都是正确的 . 在我的情况下,我得到相同的错误,因为连接字符串中指定的目录(数据库名称)的名称不正确 .

  • 0

    由于连接状态,我遇到类似的异常问题,然后我意识到我的域服务类变量标记为静态(错误) .

    我的猜测是,一旦将服务库加载到内存中,每个新调用最终都使用相同的静态变量值(域服务实例),从而通过连接状态导致冲突 .

    我认为每个客户端调用都会产生一个新线程,因此访问同一域服务实例的多个线程等同于火车残骸 .

  • 1

    我在这里发布了一个类似的问题,使用托管在Amazon RDS上的SQL 2012数据库 . 问题出在连接字符串中 - 我有 "Application Name""App" 属性 . 一旦我删除了它,它就有用了 .

    Entity Framework 5 and Amazon RDS - "The underlying provider failed on Open."

  • 2

    几天前,我使用“Integrated Security = True”,我遇到了同样的问题 . 在连接字符串中,您需要在“localsystem”下运行应用程序池标识当然不建议这样做但是为了测试它可以完成这项工作 .

    这是您在IIS 7中更改标识的方法:http://www.iis.net/learn/manage/configuring-security/application-pool-identities

  • 1

    IIS 中设置 App Pool Identity 作为服务帐户用户或管理员帐户或ant帐户,该帐户有权对该DataBase执行操作 .

  • 1

    在我的情况下,我在上下文的构造函数中注册的连接字符串名称与我的web.config中的名称不匹配 . 复制和粘贴造成的简单错误:D

    public DataContext()
            : base(nameOrConnectionString: "ConnStringName")
        {
            Database.SetInitializer<DataContext>(null);
        }
    
  • 0

    我有同样的错误,当我将connectionString更改为新的数据源时,我发现这就是忘记更改新数据库的用户名和passowrd

  • 0

    如果未指定SQL Server实例名称且SQL主机安装了多个SQL实例,我也会发生此错误 . 这里有几个例子可以澄清:

    下面的连接字符串导致异常“基础提供程序在打开时失败”,在.NET WebForms应用程序中没有内部异常:

    connectionString="metadata=res://*/Entities.csdl|res://*/Entities.ssdl|res://*/Entities.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=localhost;Initial Catalog=Entities;User ID=user;Password=password;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient"
    

    以下连接字符串在.net WebForms应用程序中按预期执行,其中SQL环境具有多个实例 . 很少见,但我的开发箱上有几个不同的SQL实例,以适应不同的项目:

    connectionString="metadata=res://*/Entities.csdl|res://*/Entities.ssdl|res://*/Entities.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=localhost\SQLSERVER2014;Initial Catalog=Entities;User ID=user;Password=password;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient"
    
  • 0

    在我的情况下服务器管理员已更改服务器地址,所以我不得不将连接字符串更改为新的服务器地址

  • 1

    我有这个问题,因为应用程序池登录这个应用程序运行已更改 .

    在IIS中:

    • 单击您的站点并转到基本设置,找到应用程序池 .

    • 转到应用程序池 .

    • 单击您站点的应用程序池 .

    • 单击“高级设置” .

    • 在身份中,输入帐户登录名和密码 .

    • 重新启动您的网站,然后重试 .

相关问题