【问题标题】:Error connecting C# web application to SQL Server将 C# Web 应用程序连接到 SQL Server 时出错
【发布时间】:2013-11-13 16:19:18
【问题描述】:

我正在使用一台新设置的笔记本电脑。我通常使用两个 Web 项目。一个很好。给我带来麻烦的是一个 C# Web 表单应用程序(ASP.NET 4.5、EF 6.0)。

以下是我尝试通过应用程序连接到数据库时遇到的错误 -

例外:

底层提供程序在打开时失败。

内部异常:

发生网络相关或特定于实例的错误,同时 建立与 SQL Server 的连接。找不到服务器或 无法访问。验证实例名称是否正确,并且 SQL Server 配置为允许远程连接。 (提供者:TCP 提供者,错误:0 - 无法建立连接,因为目标 机器主动拒绝了。)

使用 IIS Express 和 ASP.NET 开发服务器进行调试会得到相同的结果。我的连接字符串也很好 - 它与我使用的另一个项目中的连接字符串或多或少相同,除了它们的实际名称。为了清楚起见,这里是:

<connectionStrings>
  <clear/>
  <add name="RetailerEntities" connectionString="Data Source=localhost;Network Library=DBMSSOCN;Initial Catalog=db;user id=sa;password=password;MultipleActiveResultSets=true;"/>
  <add name="RetailerCContext" connectionString="metadata=res://*/Providers.Model.csdl|res://*/Providers.Model.ssdl|res://*/Providers.Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=localhost;Network Library=DBMSSOCN;Initial Catalog=db;user id=sa;password=password;MultipleActiveResultSets=true;&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

我还应该提到,我使用的两个项目都访问同一个数据库,所以奇怪的是一个会连接而一个不会。

有趣的是,这个项目一旦部署到生产环境中就没有问题了,所以它看起来只是我笔记本电脑上的一个本地问题。这让我想知道这是某种权限问题。

堆栈跟踪是:

   at System.Data.Entity.Core.EntityClient.EntityConnection.Open()
   at System.Data.Entity.Core.Objects.ObjectContext.EnsureConnection()
   at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
   at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClassb.<GetResults>b__9()
   at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)
   at System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
   at System.Data.Entity.Core.Objects.ObjectQuery`1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0()
   at System.Lazy`1.CreateValue()
   at System.Lazy`1.LazyInitValue()
   at System.Lazy`1.get_Value()
   at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Retailer.Library.DB.ConfigurationController.GetConfigurations() in c:\Development\Retail\RetailerC.Library\DB\ConfigurationController.cs:line 41
   at RetailerC.Web.Default.BindDdlSearchUrl() in c:\Development\Retail\RetailerC.Web\Default.aspx.cs:line 449
   at RetailerC.Web.Default.Page_Load(Object sender, EventArgs e) in c:\Development\Retail\RetailerC.Web\Default.aspx.cs:line 79

如果有人有任何想法或经历过类似的事情,我将不胜感激。

【问题讨论】:

  • 你的新笔记本电脑上也有数据库吗?
  • 您是否尝试过对您的 .edmx 文件进行 nuking(如果您正在使用该文件)并重新生成它?不知道它是否会有所帮助,但我以前遇到过类似的无法解释的 EF 问题时不得不这样做。
  • 您需要允许本地防火墙上的端口 1433 的流量吗?
  • @Mr.Spock 在这篇文章之前尝试过,不幸的是,没有乐趣。
  • @acfrancis 我不确定,我会调查一下。很奇怪,我可以从另一个项目很好地连接到同一个数据库,不是吗?

标签: asp.net .net sql sql-server


【解决方案1】:

我删除了“网络库=DBMSSOCN;”从连接字符串,它现在似乎工作正常。不知道为什么,但它已经为我完成了..

【讨论】:

  • 该参数将连接配置为使用 TCP/IP。没有它,连接将使用共享内存进行连接。您可以通过 SQL Server 配置管理器应用程序允许 TCP/IP 来解决此问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-14
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多