41

下面是我的连接字符串:

connectionString="metadata=res://*/EDMX.Test.csdl|res://*/EDMX.Test.ssdl|res://*/EDMX.Test.msl;provider=System.Data.SqlClient;provider连接字符串="数据源=home_computer;初始目录=db_Test;持久安全信息=True;用户ID=testUser;密码=$1234;MultipleActiveResultSets=True""

这是程序卡住的代码:

EDMX.TestingEntity context = new EDMX.TestingEntity();

var query = from t in context.User
            where t.UserName == _userName
            select t;

运行上述代码后,查看变量查询,发现异常

基础提供程序在打开时失败。

我检查过:

  1. 服务器与电脑连接正常
  2. 我可以使用用户名 testuser 和密码 $1234 登录数据库
  3. 我已经检查了数据库(SQL Server)中的安全设置,该权限已被授予 testUser

为什么会发生这个异常?我正在使用.net 4.5


添加:

我再次尝试,查看内部异常,它是:建立与 SQL Server 的连接时发生网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接)

我知道这可能是网络问题,但我已经关闭了服务器的防火墙和我的电脑,然后再次尝试但仍然没有成功..


刚才将连接字符串复制到程序以测试此连接并且它运行良好..


我只是回滚所有更改并再次测试,它工作

4

20 回答 20

56

好像是连接问题。您可以使用数据链接属性来查找连接是否正常。请执行下列操作:

  1. 创建一个空白记事本并将其重命名为“X.UDL”
  2. 双击打开
  3. 在连接选项卡下选择服务器名称/输入名称使用正确的凭据和数据库
  4. 单击确定以保存它。

现在在记事本中打开文件并比较连接字符串属性。

于 2013-08-16T11:10:34.713 回答
15
  1. 在程序和文件中搜索“组件服务”
  2. 转到服务
  3. 查找“分布式事务协调器”服务
  4. 右键单击并重新启动服务

您刚刚重新启动了服务,代码应该可以正常运行

于 2015-04-23T10:38:13.097 回答
7

web.config我们在with中有连接字符串Data Source=localhost,并且出现了这个错误(MSSQL 在同一台机器上)。不知何故,将其更改为实际的 'DOMAIN\MACHINE' 有所帮助。

于 2015-08-18T12:03:23.883 回答
6

此代码项目提示中描述了可能的解决方案:

正如人们在尝试登录 sql server 时提到的 IIS 用户网络服务用户凭据。因此,只需更改 IIS 中的应用程序池设置:

  1. 打开 Internet 信息服务管理器
  2. 单击左侧导航树中的应用程序池。
  3. 选择您的版本池。就我而言,我使用的是 ASP .Net v4.0。如果您没有此版本,请选择 DefaultAppPool。
  4. 右键单击第 3 步,然后选择高级设置。
  5. 在属性窗口中选择标识,然后单击按钮更改值。
  6. 在内置帐户组合框中选择本地系统,然后单击确定。而已。现在运行您的应用程序。一切正常。
于 2015-07-04T11:48:19.163 回答
5

如果有,请始终检查内部异常。就我而言,Inner Exception 对解决问题非常有帮助。

我的网站在开发环境中运行良好。但是在我部署到生产环境之后,它开始发出这个异常,但是内部异常是说特定用户的登录失败。
所以我发现这与连接本身有关。因此尝试使用 SSMS 登录,甚至失败了。

最终发现异常出现的原因很简单,即 SQL 服务器仅启用了 Windows 身份验证,而 SQL 身份验证失败,这是我用于身份验证的原因。

简而言之,将身份验证更改为混合(SQL 和 Windows),为我解决了这个问题。:)

于 2016-04-20T01:01:31.090 回答
4

请先检查以下事项。

在生成 Edmx 时,您会为连接字符串命名。使用实体进入项目的应用程序配置。

您是否将相同的连接字符串复制到主配置文件中。此外,名称应与您在生成 EDMX 文件时提供的名称相同。

于 2013-08-16T10:59:48.243 回答
3

我的客户报告了这个错误。我发现他在搞乱 *.ldf 文件。他在一个数据库上复制了 *ldf 文件并将其重命名以匹配第二个数据库(我让他将其放在一个文件夹中)。

我复制了相同的场景,并在我的开发系统中遇到了同样的错误。删除 *ldf 文件后错误得到修复。

于 2015-01-08T16:55:04.897 回答
3

当一位同事试图连接到受 VPN 保护的数据库时,我看到了这个错误。用户已未知切换到没有 VPN 访问权限的无线网络。测试此场景的一种方法是查看您是否可以通过其他方式(例如 SSMS)建立连接,并查看是否也失败。

于 2018-02-27T21:36:43.710 回答
2

对我来说,当这种情况通常开始发生时,我必须远程桌面进入服务并至少重新启动 IIS。它通常在我部署代码后立即开始弹出。在极少数情况下,我不得不重新启动 SQL 服务和 IIS。我编写了一个批处理脚本来获取一个参数(1 或 2)并将其设置为重新启动 IIS(即 1),或进入全核(即 2)。

于 2016-04-18T12:57:35.880 回答
2

我在开发机器上运行时经常遇到此异常,尤其是在我进行代码更改、重建代码、然后执行关联的网页之后。但是,如果我将 CommandTimeout 参数提高到 120 秒或更多(例如,在 LINQ 语句之前设置 context.Database.CommandTimeout = 120),问题就会消失。虽然这最初是在 3 年前提出的,但它可能会帮助寻找答案的人。我的理论是 VisualStudio 需要时间将构建的二进制库转换为机器代码,并且在即时编译后尝试连接到 SQL Server 时会超时。

于 2016-08-26T00:42:11.607 回答
2

就我而言,我通过在连接字符串中添加连接密码来解决该错误。

在设置 EF 模型时,我选择了从连接字符串中排除敏感数据的选项。因此,最初没有包含密码。

于 2017-05-22T12:47:17.890 回答
2

我在继续执行调用使用并行处理的方法的单元测试时遇到了这个问题。我知道 EF 的某些部分不是线程安全的,所以我想知道它是否是打开连接的冲突并与操作不同步。

我的堆栈跟踪显示了这一点:

     at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at System.Threading.Tasks.Task.Wait()
   at System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Func`4 bodyWithLocal, Func`1 localInit, Action`1 localFinally)
   at System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IList`1 list, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Action`3 bodyWithStateAndIndex, Func`4 bodyWithStateAndLocal, Func`5 bodyWithEverything, Func`1 localInit, Action`1 localFinally)
   at System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IEnumerable`1 source, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Action`3 bodyWithStateAndIndex, Func`4 bodyWithStateAndLocal, Func`5 bodyWithEverything, Func`1 localInit, Action`1 localFinally)
   at System.Threading.Tasks.Parallel.ForEach[TSource](IEnumerable`1 source, Action`1 body)

所以这就是我遵循的线索。当我回到单线程 foreach 而不是 Parallel.ForEach 时,问题就消失了。

乔伊

于 2018-03-30T23:24:45.067 回答
1

我遇到了这个错误,它是由 App.config 中的连接字符串中的拼写错误引起的。

于 2016-12-06T04:06:35.037 回答
1

我今天遇到了同样的错误,我做错的是我没有在连接字符串中添加密码标签。一旦我添加了正确密码的密码标签,错误就消失了。希望它可以帮助某人。

于 2019-12-23T15:47:00.327 回答
1

我遇到了同样的问题。尽管就我而言,我试图将我的桌面应用程序连接到远程数据库。所以对我来说,以上所有都不起作用。我通过添加端口(as)解决了这个问题128.02.39.29:3315,它神奇地工作!我一开始不费心添加端口的原因是因为我在另一个桌面应用程序中使用了相同的方法(没有端口)并且它有效。所以我希望这也可以帮助某人。

于 2019-12-27T07:41:01.403 回答
1

此解决方案适用于在部署Windows 应用程序时遇到此问题的人,

我知道这已经晚了,但这可能对将来的某个人有用,在我的场景中,这纯粹是一个连接字符串问题我使用实体框架(DB First 方法)开发了一个 Windows 应用程序并发布了它,代码运行良好我的机器,但它在客户端机器上不起作用

这个问题的原因:-

我在 App.config 文件中更新了客户端机器连接字符串,但这是错误的,如果那是 Windows 应用程序,那么它不会从 App.config 中读取连接字符串(对于已部署的机器),它将从 .exe 中读取。配置文件,

所以部署后,我们需要更改“AppicationName”.exe.config文件中的连接字符串

于 2020-12-17T16:17:20.747 回答
0

试试这个 - 以管理员身份打开命令提示符并键入此 netsh Winsock 重置

重新启动系统并重试。

于 2014-07-18T17:30:18.853 回答
0

如果您使用的是本地 .mdf 文件,可能是 Dropbox 等同步软件尝试在两台不同的计算机上同步两个日志文件 (.ldf),您可以从 bin 目录中删除日志文件并确保 .mdf 属性->复制到输出目录->如果更新,则复制将复制选定的数据库文件并将其记录到 bin 目录。!警告-如果您的数据库文件仅在 bin 目录中更改,则所有更改都将被丢弃!

于 2015-01-23T07:32:14.667 回答
0

打开 SQL Server 配置管理器,然后单击 sql server services 从列表中显示一个列表,右键单击 sql server 并单击开始

于 2017-01-15T04:54:31.253 回答
-3

错误:EntityFramework.SqlServer.dll 中出现“System.Data.Entity.Core.EntityException”类型的异常,但未在用户代码中处理附加信息:基础提供程序在打开时失败。

解决方案:

  • 添加模型:

     [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
     [Key] 
    
  • 命名空间:

    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    
  • 例子:

    namespace MvcApplication1.Models
    {
      [Table("tblEmployee")]
      public class Employee
      {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [Key]
        public int EmplyeeID { get; set; }         
        public string Name { get; set; }
        public string Gender { get; set; }
        public string City { get; set; }      
      }
    }
    
于 2017-01-31T14:37:56.287 回答