从服务器接收结果时发生传输级错误。


169

我收到一个SQL Server错误:

从服务器接收结果时发生传输级错误。(提供者:Shared Memory Provider,错误:0-句柄无效。)

我正在运行Windows 2008 Standard 64位的Sql Server 2008 SP1。

这是一个.Net 4.0 Web应用程序。向服务器发出请求时会发生这种情况。这是断断续续的。知道我该如何解决吗?


3
如果数据库是在将AUTO_CLOSE设置为True的旧版SQL Express / MSDE上创建的,则可能会发生这种情况。或重新启动了SQL Server服务实例。
devstuff'7

1
我的原因可能是您的数据库上有待执行的操作。这导致数据库锁定。
pix 2014年

4
标记的答案不是答案。下面的迈克尔·奥利维罗(Michael Olivero)的答案实际上提供了内容,当我遇到它时,跟随它解决了问题。(手动关闭我的开发机器上的临时Web服务器。)我建议更改答案。
亚当·米勒

3
@Flexo这是关闭的题外话?我刚刚遇到了全新安装的VS 2017和MS SQL 2016 Enterprise。虽然它与VS 2015 Community一起正常工作。
爱德华

1
这不应该是题外话。该问题与使用的代码无关,因此无法为其创建MCVE。另外,关闭原因指出:this one was resolved in a manner unlikely to help future readers-但是有17.9万人遇到了这个问题。
Nisarg

Answers:


102

数据库服务器关闭了数据库连接。该连接在您应用的连接池中仍然有效;结果,当您选择共享连接字符串并尝试执行时,它将无法访问数据库。如果要开发Visual Studio,只需在任务栏上关闭临时Web服务器。

如果它在生产中发生,则为网站重置应用程序池应回收连接池。


1
这是实际答案。
TheHuge_

2
在我的特定情况下,我MultipleActiveResultSets=True在连接字符串中进行了设置,导致了相同的错误。
Semyon Vyskubov

17

在命令提示符处尝试以下命令:

netsh interface tcp set global autotuning=disabled

这将关闭网络堆栈的自动扩展功能


20
您能否提供一些实际的细节?是否有任何理由反对在全球范围内设置该值?
Drew Noakes 2010年

1
它会关闭网络堆栈的自动扩展功能。
Simmo 2010年

在Windows XP SP3中不起作用。Netsh界面在Windows XP中没有tcp子命令,但是在Windows 7 SP1中运行良好。
Narayanan 2012年

我知道这很旧,但这是唯一对我有用的解决方案(大多数问题/解决方案都围绕Web服务器/应用程序运行,我的情况是台式机应用程序和本地网络服务器,没有IIS或类似的东西)。为什么关闭自动调整/自动缩放功能可以解决此问题?
特伦特

1
就我而言,SQL Server Management Studio的ReOpen解决了该问题
Alex

15

我有同样的问题。我重新启动了Visual Studio,并解决了该问题


12

对于不使用IIS的用户,使用Visual Studio 2010进行调试时会遇到此问题。我结束了所有调试器过程:WebDev.WebServer40.EXE解决了该问题。


请告诉您如何结束这些过程的步骤。我是新手,我不知道您“结束所有调试程序的过程”是什么意思
牢不可破

@Unbreakable我刚刚使用了任务管理器。在任务管理器中,您可以看到名称为WebDev.WebServer40.EXE的所有正在运行的进程。有关如何杀死Windows进程,请参见betanews.com/2015/10/08/how-to-kill-a-windows-process
jth_92

8

传输级别错误通常与到sql server的连接断开有关……通常是网络连接。

通常,当SQL查询运行时间过长时,将引发Timeout Expired。

因此很少有以下选择:

  1. 检查VPN(如果使用)或任何其他工具中的连接
  2. 重新启动IIS
  3. 重启机器
  4. 优化sql查询。

简单的答案却节省了我的时间。
柯克,

7

您所需要做的就是停止ASP.NET开发服务器并再次运行该项目


4

如果通过Microsoft SQL Server Management连接到数据库,请关闭所有连接,然后重试。连接到另一个Azure数据库时出现此错误,并在关闭它时为我工作。还是不知道为什么..


这是对我有用的修复程序。我关闭了SQL Server Management Studio,然后再也没有看到此错误。
Beevik 2013年

4

总是经过约5分钟的操作后才能得到它。经过调查,发现e1iexpress始终发出警告,直到发生故障。这显然是与某些TCP / IP适配器有关的错误。但是从WiFi改为硬连线并没有影响它。

因此尝试了Plan B,然后重新启动了Visual Studio。然后工作正常。

在更深入的研究中,我注意到,如果工作正常,该消息The Thread '<No Name>' has exited with code 0几乎是在先前尝试中运行崩溃时发生的。一些谷歌搜索发现该消息在服务器修剪线程池时显示。

大概在线程池中有一个虚假线程,每当服务器尝试对其进行“修剪”时,它将应用程序关闭。


4

查看详细说明此错误的MSDN博客

移除连接

连接池在闲置了很长一段时间后,或者在检测到与服务器的连接已断开时,会从池中删除连接。

请注意,只有在尝试与服务器通信后才能检测到断开的连接。如果发现不再与服务器连接的连接,则将其标记为无效。

仅当无效连接关闭或回收时,才会从连接池中删除它们。

如果存在与消失的服务器的连接,则即使连接池没有检测到断开的连接并将其标记为无效,也可以从池中提取该连接。

之所以如此,是因为检查连接是否仍然有效的开销将通过引起与服务器的另一次往返来消除拥有池的好处。

发生这种情况时,首次尝试使用该连接将检测到该连接已断开,并引发了异常。

基本上,您所看到的是最后一句话中的该异常。

连接是从连接池中获取的,应用程序不知道物理连接已消失,因此在物理连接仍然存在的前提下尝试使用它。

而你得到了例外。

有几个常见原因。

  1. 服务器已重新启动,这将关闭现有连接。

在这种情况下,请查看通常在以下位置找到的SQL Server日志:C:\ Program Files \ Microsoft SQL Server \\ MSSQL \ LOG

如果启动时间戳记是最近的,则我们可以怀疑这是导致错误的原因。尝试将此时间戳与异常时间相关联。

2009-04-16 11:32:15.62服务器将SQL Server消息记录在文件'C:\ Program Files \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ LOG \ ERRORLOG'中。

  1. 某人或某物杀死了正在使用的SPID。

同样,请查看SQL Server日志。如果您发现一个致命的问题,请尝试将此时间戳与异常时间相关联。

2009-04-16 11:34:09.57 spidXX进程ID XX被主机名xxxxx,主机进程ID XXXX杀死。

  1. 再次进行故障转移(例如在镜像设置中),请查看SQL Server日志。

如果存在故障转移,请尝试将此时间戳记与异常时间相关联。

2009-04-16 11:35:12.93 spidXX由于故障转移,镜像数据库“”将角色从“ PRINCIPAL”更改为“ MIRROR”。


3

当您的脚本使SQL Service由于某些原因停止时,您会收到此消息。因此,如果您再次启动SQL Service,则可能会解决您的问题。


请提供有关如何启动SQL Service的步骤。我是一个初学者,我刚刚创建了一个asp.net mvc 5应用程序。当我运行“ enable-migrations”一切都很好时,然后我运行“ add-migration” sdfd”一切都很好,然后当我单击更新数据库时出现此错误。请指导我
牢不可破

3

我知道这可能无法帮助所有人(谁知道,也许是),但是我遇到了同样的问题,一段时间后,我们意识到原因是代码本身无法解决的。

试图访问服务器的计算机位于另一个网络中,可以建立连接,但随后断开连接。

我们用来修复它的方法是在计算机上添加一条静态路由,从而无需通过防火墙即可直接访问服务器。

route add p YourServerNetwork mask NetworkMask Router 

样品:

route add p 172.16.12.0 mask 255.255.255.0 192.168.11.2 

我希望它能对某人有所帮助,最好至少将此作为一个线索,因此,如果您面对它,便会知道如何解决。


2

我在Visual Studion 2012开发环境中遇到了相同的错误,停止了IIS Express并重新运行该应用程序,它开始工作。


2

就我而言,“ SQL Server”服务器服务已停止。重新启动服务后,我可以运行查询并消除错误。

检查您的查询以找出为什么查询使该服务停止的原因也是一个好主意

在此处输入图片说明


1

我遇到过同样的问题。我解决了它,将SQL Server LOG截断了。检查一下,然后告诉我们此解决方案是否对您有帮助。


1

对我来说,答案是将操作系统从2008R2升级到2012R2,iisreset或重新启动apppool的解决方案对我不起作用。我也尝试过打开“ TCP Chimney Offload”设置,但我没有重新启动服务器,因为它是生产服务器,也无法正常工作。


1

对我而言,解决方案完全不同。

就我而言,我有一个需要datetimestamp参数的对象源。即使该ODS参数ConvertEmptyStringToNull为true,也将1/1/0001传递给SelectMethod。当该日期时间传递到sql服务器时,这又导致了sql datetime溢出异常。

添加了对datetime.year!= 0001的额外检查,为我解决了此问题。

奇怪的是它将引发传输级别错误,而不是日期时间溢出错误。无论如何..


1
没有任何关系,一定是巧合
Michiel Cornille

1

我们最近在业务服务器和数据库服务器之间遇到此错误。我们的解决方案是禁用网络接口上的“ IP卸载”。然后错误消失了。


1

我发现此错误的原因之一是连接字符串中的“ Packet Size = xxxxx ”。如果xxxx的值太大,我们将看到此错误。根据网络功能,删除此值并让SQL Server处理它或将其保持在较低水平。


1

当我尝试还原SQL数据库并按照“ Options选项卡中的复选框”进行检查时,这发生在我身上,

在此处输入图片说明

由于它是一个独立的数据库服务器,因此只需关闭SSMS并重新打开它即可为我解决问题。


1

在删除数据库并重新创建一些共享资源后仍认为数据库仍然存在时,会发生这种情况,因此当您重新运行执行查询以在重新创建数据库后在数据库中创建表时,该错误将不再显示,并且Command(s) completed successfully.消息将显示而不是错误消息Msg 233, Level 20, State 0, Line 0 A transport-level error has occurred when sending the request to the server. (provider: Shared Memory Provider, error: 0 - No process is on the other end of the pipe.)

删除和重新创建数据库并重新执行DDL查询时,无需担心,只需忽略此错误。


0

我最近遇到了同样的问题,但是我无法在Google上找到答案。因此,请考虑在此处共享它,以便将来可以为某人提供帮助。

错误:

在执行查询时,查询将提供很少的输出,然后将引发以下错误。

“从服务器接收输出时发生传输级别错误(TCP:provider,错误:0-指定的网络名称不再可用”

解:

  1. 检查该链接服务器的提供者
  2. 在该提供程序属性中,为该特定提供程序启用“允许进程内”选项以解决该问题。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.