【问题标题】:ado.net entity framework 4.1 error 40 on database initializationado.net 实体框架 4.1 数据库初始化错误 40
【发布时间】:2012-11-26 23:51:43
【问题描述】:

我正在使用 ado.net 实体框架 4.1 连接到我计算机上的 sql server 2008 r2 64 位实例。 但是当我尝试初始化连接时,出现以下异常:

{“在建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问该服务器。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接.(提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接)"}

该实例的 sql 服务正在运行,还有 sql 浏览器。为 1433 端口和 sql 浏览器添加了例外。 在 sql server 配置管理器中,启用共享内存,也称为管道和 tcp/ip。

这些是我的 app.config 连接字符串: 使用用户名和密码:

 <connectionStrings>
<add name="DbTerminalContext" connectionString="Data Source=URIEL\SQLIT64;Initial Catalog=IFDB;User Id=sa;Password=password;MultipleActiveResultSets=True"
  providerName="System.Data.SqlClient" />

这是使用 Windows 身份:

<add name="DbTerminalContext" connectionString="Data Source=URIEL\SQLIT64;Initial Catalog=IFDB;Trusted_Connection=True;MultipleActiveResultSets=True"
  providerName="System.Data.SqlClient" />

我尝试使用 URIEL、.\SQLIT64 和 localhost\SQLIT64 的 insted,但我根本无法连接。

我已经搜索并尝试了在这里和其他地方找到的各种解决方案。没有任何解决方案。 所以有人可以帮助我吗? 提前致谢

【问题讨论】:

  • 实例名称是否正确?
  • 是的。我正在使用 sql server management studio 连接当前连接
  • 那你确定你的连接字符串正在被使用吗?例如。将其设置为空或无效,您会收到不同的消息吗? (检查您是否正在编辑正确的字符串)

标签: c# sql-server entity-framework networking sql-server-2008-r2


【解决方案1】:

检查是否在 Sql Server 配置管理器中启用了 NamedPipes

(开始 -> SQL* -> 配置 -> SQL Server 配置管理器,然后单击 SQL Server 网络配置节点)。

【讨论】:

  • 在原帖中我提到了这一点。命名管道实际上已启用
【解决方案2】:

尝试将元数据资源信息添加到您的连接字符串。

假设您的实体数据模型名为“TerminalDataEntities.edmx”,您的项目的 obj\Debug\edmxResourcesToEmbed 文件夹中会生成三个文件。

  • TerminalDataEntities.csdl
  • TerminalDataEntities.ssdl
  • TerminalDataEntities.msl

要将这些资源添加到您的连接字符串中,您需要更改 add-Tags connectionString-Value 的格式。

元数据:

metadata=res://*/TerminalDataEntities.csdl|res://*/TerminalDataEntities.ssdl|res://*/TerminalDataEntities.msl;

提供者:

provider=System.Data.SqlClient;

和提供者连接字符串:

provider connection string=&quot;Data Source=URIEL\SQLIT64;Initial Catalog=IFDB;Trusted_Connection=True;MultipleActiveResultSets=True&quot;

把它们放在一起:(使用 Windows 标识)

<add name="DbTerminalContext" connectionString="metadata=res://*/TerminalDataEntities.csdl|res://*/TerminalDataEntities.ssdl|res://*/TerminalDataEntities.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=URIEL\SQLIT64;Initial Catalog=IFDB;Trusted_Connection=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

(无 Windows 标识)

<add name="DbTerminalContext" connectionString="metadata=res://*/TerminalDataEntities.csdl|res://*/TerminalDataEntities.ssdl|res://*/TerminalDataEntities.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=URIEL\SQLIT64;Initial Catalog=IFDB;User Id=sa;Password=password;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

希望这行得通。

【讨论】:

  • 我首先使用代码来阅读我一直在阅读的内容,我不需要元数据部分
  • 我想我找到了问题所在。问题不在于连接,而在于我的 dbcontext 类。我正在使用此代码:使用 (var tmp= new DbTerminalContext("DbTerminalContext"){} 而不是加载正确的连接字符串,假设如下:"Data Source=.\\SQLEXPRESS;Initial Catalog=DbTerminalContext;Integrated Security =True;MultipleActiveResultSets=True" 表示服务器实例未激活。现在问题出现在从 app.config 加载正确的连接字符串
  • 使用var tmp= new DbTerminalContext("Name=DbTerminalContext"){} - 注意参数中的“名称” - 它告诉 CodeFirst 从配置文件中获取具有给定名称的连接字符串。
猜你喜欢
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多