1

在过去的几周里,我遇到了这个问题,虽然我学到了很多东西,但我仍然没有设法找到解决方案。

基本上我得到的错误是:

建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:SQL 网络接口,错误:26 - 错误定位服务器/指定的实例)

堆栈跟踪:

[SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)]
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +6351920
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() +412
   System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity) +6366506
   System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, SqlConnection owningObject) +180
   System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, TimeoutTimer timeout) +6366917
   System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, TimeoutTimer timeout, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) +6366793
   System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) +352
   System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) +831
   System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) +49
   System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) +6368598
   System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) +78
   System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) +2194
   System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +89
   System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +6372110
   System.Data.SqlClient.SqlConnection.Open() +300
   System.Data.SqlClient.SqlProviderServices.UsingConnection(SqlConnection sqlConnection, Action`1 act) +132
   System.Data.SqlClient.SqlProviderServices.UsingMasterConnection(SqlConnection sqlConnection, Action`1 act) +3981391
   System.Data.SqlClient.SqlProviderServices.GetDbProviderManifestToken(DbConnection connection) +10513049
   System.Data.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection) +44

[ProviderIncompatibleException: The provider did not return a ProviderManifestToken string.]
   System.Data.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection) +11121429
   System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection) +239
   System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) +61
   System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input) +221
   System.Data.Entity.Internal.LazyInternalContext.InitializeContext() +442
   System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +25
   System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() +89
   System.Data.Entity.Internal.Linq.InternalSet`1.GetEnumerator() +21
   System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +382
   System.Linq.Enumerable.ToList(IEnumerable`1 source) +80
   _2ndBrain.Controllers.BrainController.Index() in c:\users\apis\documents\visual studio 2010\Projects\2ndBrain\2ndBrain\Controllers\BrainController.cs:22
   lambda_method(Closure , ControllerBase , Object[] ) +79
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +264
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +39
   System.Web.Mvc.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +129
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +826266
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +314
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +825488
   System.Web.Mvc.Controller.ExecuteCore() +159
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +335
   System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +62
   System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +20
   System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +54
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +469
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +375

我可以使用带有连接字符串的 SSMS 连接到该数据库:

<add name="ApplicationServices" connectionString="Data Source=sql7.hostinguk.net;Integrated Security=False;Database=orchard_chris;User Id=*****;Password=*******;" providerName="SqlServer" />

此外,orchard 能够使用相同的凭据连接到数据库,所以我不明白为什么我的自定义构建的应用程序无法连接。

感谢您的帮助,克里斯·史蒂文斯

编辑:

仍在寻求有关此问题的帮助。我不认为这是连接字符串问题,因为我可以通过 IIS 和 SSMS 连接到数据库。

我还问了我的托管服务提供商可能是什么问题,有人回复我说:

如果您正在使用的用户详细信息正在工作,那么您拥有的字符串应该没问题。如果详细信息正确,最常见的原因是您在设置成员资格提供程序时没有指定连接字符串名称,这意味着它们默认为机器字符串。检查您拥有的所有提供程序是否引用了正确的字符串名称。

我不确定这意味着什么,这可能是解决方案吗?

编辑2:

此外,我已经确认了下面的 1,2 和 3。我不确定如何检查 4 和 5。

  • 确保您的服务器名称正确,例如,名称没有拼写错误。
  • 确保您的实例名称正确,并且您的目标机器上实际上存在这样的实例。[更新:某些应用程序将 \ 转换为 . 如果您不确定您的应用程序,请在连接字符串中同时尝试 Server\Instance 和 Server\Instance]
  • 确保服务器机器可访问,例如,DNS 可以正确解析,您可以 ping 服务器(并非总是如此)。
  • 确保 SQL Browser 服务正在服务器上运行。
  • 如果服务器上启用了防火墙,则需要将 sqlbrowser.exe 和/或 UDP 端口 1434 置于异常中。

此外,我已确认服务器已配置为允许远程连接。

4

3 回答 3

0

你没有得到DbProvider喜欢的服务器的响应。三重检查服务器名称、用户名和密码。

尝试从

providerName="SqlServer"

providerName="System.Data.SqlClient"

另请查看是否ProviderIncompatibleExceptionInnerException可能提供更多信息。

于 2012-10-17T20:15:51.980 回答
0

一定要检查 InnerException。

我的是Login failed for user 'IIS APPPOOL\\dev.XXXXXXXX.com'- 很容易修复

没有帮助的可怕例外The provider did not return a ProviderManifestToken string

于 2012-12-12T01:16:14.867 回答
0

所以一段时间后回到这个,希望我能帮助别人。原来我的代码中有一个流氓 DbContext : base("UnicornsDatabase") 我忘记了。

在这种情况下,“UnicornsDatabase”连接字符串要么不存在,要么转到不存在的数据库。

实在是太傻了。谢谢你的帮助。

于 2013-05-15T09:05:28.013 回答