无法通过MVC3 .net连接到托管的SQL Server 2008数据库

时间:2012-10-17 19:53:54

标签: c# .net sql asp.net-mvc-3

过去几周我遇到过这个问题,虽然我学到了很多东西,但我还是找不到解决办法。

基本上我得到的错误是:

  

发生与网络相关或特定于实例的错误   建立与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异常。

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

3 个答案:

答案 0 :(得分:0)

您没有收到来自DbProvider喜欢的服务器的回复。三次检查服务器名称,用户名和密码。

尝试从

更改提供者名称

providerName="SqlServer"

providerName="System.Data.SqlClient"

另请参阅ProviderIncompatibleException是否有可能提供更多信息的InnerException

答案 1 :(得分:0)

绝对检查InnerException。

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

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

答案 2 :(得分:0)

一段时间后回到这里,希望我能帮助别人。事实证明我的代码中有一个流氓DbContext:base(“UnicornsDatabase”),我已经忘记了。

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

非常愚蠢。谢谢你的帮助。