为什么会出现“无法连接到服务器-与网络有关或与实例有关的错误”?


378

尝试连接到SQL Server时出现以下错误:

无法连接到108.163.224.173。

建立与SQL Server的连接时发生与网络相关或特定于实例的错误。

服务器未找到或无法访问。验证实例名称正确,并且已将SQL Server配置为允许远程连接。

(提供者:命名管道提供程序,错误:40-无法打开与SQL Server的连接)(Microsoft SQL Server,错误:1326)

当我尝试在Visual Studio 2010中尝试将数据库配置为gridview时,会引发此错误。我不知道如何调试此错误。

您将如何调试此错误?除了错误消息中提到的步骤之外,我还应该采取什么步骤来确定实际发生的情况?


11
ping对于测试SQL Server连接不可靠,默认情况下,Windows Server中禁用了ICMP回显请求。错误的用户名或密码根本不是错误,这是一个完全不同的错误。
肖恩·艾利2013年

1
试试这个文章,它通过几乎所有你需要解决您的连接问题的步骤:social.technet.microsoft.com/wiki/contents/articles/...
肖恩·艾雷

3
如果是首次设置时,SQL Server {version} Express收到此错误,请参见我的屏幕快照。我回到StackOverflow并再次使用我的答案,因为它是唯一有效的方法。 stackoverflow.com/questions/1391503/...
马盖先

当我想连接到本地主机时,在虚拟服务器上遇到了这个问题。启动OS时似乎出现了某种错误-就我而言,幸运的是,通过重新启动,所有问题都得以解决。
Qohelet

今天我花了很多时间,最后对我有用的是:打开Sql Server配置管理器 -> <INSTANCE>的协议 -> TCP / IP- > IP Addresses(Tab)。转到最后一个条目IP All,并提及TCP端口1433。现在,使用services.msc重新启动SQL Server(INSTANCE)。此后,问题得到解决。
ani627 2015年

Answers:


301

我发现以下技术很有帮助:

  1. 确保您的数据库引擎配置为接受远程连接

    • 开始>所有程序> SQL Server 2005>配置工具> SQL Server外围应用配置器
    • 单击用于服务和连接的外围应用配置
    • 选择有问题的实例>数据库引擎>远程连接
    • 启用本地和远程连接
    • 重新启动实例
  2. 您可能需要在防火墙上为正在使用的SQL Server实例和端口创建一个例外

    • 开始>运行> Firewall.cpl
    • 单击例外选项卡
    • 添加sqlservr.exe(通常位于中C:\Program Files (x86)\Microsoft SQL Server\MSSQL.x\MSSQL\Bin,检查安装的实际文件夹路径)和端口(默认为1433
    • 还要检查您的连接字符串
  3. 检查您的SQL Server服务是否已启动并正常运行:

    • 转到所有程序> Microsoft SQL Server 2008>配置工具> SQL Server配置管理器> SQL Server服务
    • 检查以确保SQL Server服务状态为“正在运行”。

    此外,请确保您的远程服务器在同一网络中。运行sqlcmd -L以确定您的服务器是否包含在网络列表中。

  4. 在SQL Server配置中启用TCP / IP

    当通过网络连接两个或多个SQL Server时,它们将使用TCP / IP进行所有通信。SQL Server安装的默认端口为1433。可以通过SQL Server配置管理器更改此端口。应该为要连接的SQL Server启用TCP / IP。

    • 转到所有程序>> Microsoft SQL Server 2008 >>配置工具>> SQL Server配置管理器>>选择TCP / IP
    • 右键单击TCP / IP >>单击启用

    您必须重新启动SQL Server服务,所有更改才能生效。右键单击并转到菜单属性,以选择可以更改SQL Server默认端口的位置。


10
使用SQL Server 2014 Express时,在SQL Server配置中启用TCP / IP是我的解决方案。
Mike Richards

73
今天我花了很多时间,最后对我有用的是:打开Sql Server配置管理器 -> <INSTANCE>的协议 -> TCP / IP- > IP Addresses(Tab)。转到最后一个条目IP All,并提及TCP端口1433。现在,使用services.msc重新启动SQL Server(<INSTANCE>)。在此之后,问题得到解决!
ani627

1
我还遇到了本地Sql服务器上的特定问题,并通过检查操作系统的本地服务并搜索特定的Sql服务并逐个启动它们来解决了该问题。它工作完美。
Faisal Naseer 2015年

4
我也遇到同样的问题,登录到sql服务器时发现mssqlserer服务已停止,启动了它。现在可以连接到实例
Rak 2015年

15
还请记住ENABLE SQL Server Browser维修。我当时已经设置了许多SQL服务器...但是,这一步似乎总是涉及不同的场景:)
mschr

125

我为我找到了解决方案:

打开“ SQL Server配置管理器”

现在,单击“ SQL Server网络配置”,然后单击“ 名称协议”

右键单击“ TCP / IP”(确保已启用),单击“属性”。

现在,选择“ IP地址”选项卡-并且-转到最后一个条目“ IP全部”

输入“ TCP端口” 1433。

现在, 重新启动 “ SQL Server .Name”。使用“ services.msc”(winKey + r)

它会工作...


尝试此操作,但是由于某种原因,当我右键单击并在Windows10中的“ TCP / IP”上选择“属性”时,它不会为此打开对话框窗口。通常,树视图中的其他节点确实会弹出对话框。有人有这个问题和解决办法吗?
Ryan Betker-healthNCode

3
在SQL Server 2014中,请使用(localdb)\ mssqllocaldb代替(localdb)\ v11.0
Shalva Avanashvili,2016年

67
复制粘贴我的评论(发表于2015年2月24日-发布之前7个月)作为答案,而没有给我任何积分!:P
ani627

2
这工作了。我无法连接到SQL Server2016。进行了这些更改,它起作用了!谢谢。
Ankur

1
这个对我有用。在配置管理器中启用TCP / IP和命名管道后,只需要在“ service.msc”中启动服务即可。
Alif Noushad

100

添加我强烈支持的评论作为屏幕截图的答案。

我花了很多时间,最后对我有用的是:

1)打开Sql Server配置管理器 -> SQL Server网络配置 -> <(INSTANCE)>的协议 -> TCP / IP(双击它)。

在此处输入图片说明

2)选择-> IP地址(Tab)

3)转到最后一个条目IP All,并提及TCP端口1433

在此处输入图片说明

4)按,Win+R然后输入services.msc

5)现在重新启动SQL Server <(INSTANCE)>

在此处输入图片说明

在此之后,问题得到解决!



为我工作,SQL Express 2012
lost_in_magento

启用TCP后,在sql server 2012中为我工作,将端口号1433添加到TCP ALL,然后重新启动服务!
Chirag Khatsuriya

对我来说,我还必须允许防火墙中使用TCP 1433 UDP 1434
MarkusEgle

83

我通过打开服务来解决该问题,然后开始运行Sql Server(Sqlexpress)服务。

服务形象


3
我已经看到将SQL Server Windows服务设置为“手动启动类型”的位置,因此它在重新启动后并未重新启动。应该将其设置为“自动”。
robertburke

2
这正是我所做的,“我的状态”为“运行”,“ StartupType”为“自动”,但仍然遇到问题,因此我使用了“运行”窗口类型的服务,services.msc然后右键单击SQL Server(SQL EXPRESS)的上下文菜单,然后单击“停止并启动”再次服务,对我来说很好,希望能有所帮助。
shaijut

22

此错误主要是在SQL服务停止时发生的。您需要重新启动服务。要转到此窗口,您必须像这样搜索服务- 在此处输入图片说明

然后搜索SQLSERVER(MSSQLSERVER)并重新启动服务。

在此处输入图片说明

希望这会起作用。


18

window + R (Run window Open)在运行窗口中按,然后键入"services.msc"服务,然后打开新服务,找到具有实例名称的SQL SERVER(对于我而言),SQL SERVER(SQLEXPRESS)然后启动此服务,然后重试对我有用。希望对您也有用。在此处输入图片说明


答案是先前提供的。不要再有任何理由将其再次发布
Anik Saha

8
哥们面临着同样的问题,但是我不知道热开放的服务窗口,于是我找到了一种方法,并认为与人们分享
Hafiz Asad

谢谢,@ HafizAsad。您的回答对我有用。
Adnan Ahmad

@AdnanAhmad,欢迎您。感谢您的赞赏。
哈菲兹·阿萨德


13

当我想在另一台PC上运行WinForms项目(包括使用SQL Server数据库并且在我的PC上完美运行)时,我遇到了相同的错误。问题出在我PC上的Windows防火墙中。我通过添加两个规则解决了这个问题。这是如何允许SQL Server通过Windows防火墙的整个过程:

  1. 打开“运行”并输入 services.msc
  2. 查找用于SQL Server(实例名称)和SQL Server浏览器的服务。一次单击一次,右键单击,选择“属性”,将路径复制到exe文件
  3. 然后打开firewall.cpl,单击“允许应用程序或添加规则”,添加先前复制的路径(需要执行以下步骤),选中“域和私有”,取消选中“公共”。

这是YouTube链接,您可以在其中看到此过程:允许SQL Server通过Windows防火墙


非常适合我。重要提示:在防火墙中添加浏览器和服务器!+1
BendEg '16

我很难找到sqlservr.exe文件,这确实找到了窍门。
斯坦(Stan)

11

如果以上解决方案均无效(对我而言没有任何效果),则只需重新启动计算机,即可连接到sql服务器(本地主机)。


之所以能够成功,是因为您刚刚安装了Sql Server,并且没有按照安装说明重新启动计算机。因此,执行此操作,然后将创建服务以及所有必需的配置丢失。
Sterling Diaz

10

完成此处提到的所有操作后:
http : //blog.sqlauthority.com/2009/05/21/sql-server-fix-error-provider-named-pipes-provider-error-40-could-not-open-a-连接到sql-server-microsoft-sql-server-error / 仍然对我不起作用。

步骤对我有用:

Start > Run > cmd > sqlcmd -L

它将提示您服务器名称。确保此服务器名称与SQL Management Studio的“连接到服务器”框中尝试连接的服务器名称相同。

我犯了一个愚蠢的错误,我一直在使用MSSQLSERVER而不是使用此服务器名称。

希望这对像我一样犯傻错误的人有所帮助。

谢谢。


7

我正在使用SQL Server 2016和Window 10。

在此处输入图片说明

第一件事是允许远程连接到SQL Server。我要做的是在开始菜单中键入sqlservermanager13.msc,以打开SQL Server配置管理器。确保已启用TCP / IP状态。 在此处输入图片说明

双击TCP / IP协议名称,检查您的TCP端口号。通常,默认情况下为1433。

在此处输入图片说明

以下过程通过使用具有高级安全性的Windows防火墙Microsoft管理控制台(MMC)管理单元来配置Windows防火墙。具有高级安全性的Windows防火墙仅配置当前配置文件。

在Windows防火墙中打开端口以进行TCP访问

  1. 在“开始”菜单上,单击“运行”,键入WF.msc,然后单击“确定”。
  2. 在具有高级安全性的Windows防火墙的左窗格中,右键单击“入站规则”,然后在操作窗格中单击“新建规则”。
  3. 在“规则类型”对话框中,选择“端口”,然后单击“下一步”。
  4. 在“协议和端口”对话框中,选择“ TCP”。选择“特定本地端口”,然后键入数据库引擎实例的端口号,例如默认实例为1433。点击下一步。
  5. 在“操作”对话框中,选择“允许连接”,然后单击“下一步”。
  6. 在“配置文件”对话框中,选择要描述连接到数据库引擎时计算机连接环境的任何配置文件,然后单击“下一步”。
  7. 在“名称”对话框中,为该规则键入名称和描述,然后单击“完成”。

另一件事要配置。

使用动态端口时打开对SQL Server的访问

  1. 在“开始”菜单上,单击“运行”,键入WF.msc,然后单击“确定”。
  2. 在具有高级安全性的Windows防火墙的左窗格中,右键单击“入站规则”,然后在操作窗格中单击“新建规则”。
  3. 在“规则类型”对话框中,选择“程序”,然后单击“下一步”。
  4. 在“程序”对话框中,选择“此程序路径”。单击“浏览”,然后导航到要通过防火墙访问的SQL Server实例,然后单击“打开”。默认情况下,SQL Server位于C:\ Program Files \ Microsoft SQL Server \ MSSQL13.MSSQLSERVER \ MSSQL \ Binn \ Sqlservr.exe。点击下一步。
  5. 在“操作”对话框中,选择“允许连接”,然后单击“下一步”。
  6. 在“配置文件”对话框中,选择要描述连接到数据库引擎时计算机连接环境的任何配置文件,然后单击“下一步”。
  7. 在“名称”对话框中,为该规则键入名称和描述,然后单击“完成”。

看看Microsoft文档 为数据库引擎访问配置Windows防火墙


在我的PC Windows 10上,SQL Server实例位于C:\ Program Files \ Microsoft SQL Server \ MSSQL13.SQLEXPRESS \ MSSQL \ Binn \ Sqlservr.exe
Mayer Spitzer

7

您可以测试以下方法。

  • 一个

    1. 检查项目的连接字符串。
  • b

    1. 转到服务并重新启动SQLServer实例。
  • C

    1. 打开“ SQLServer配置管理器”
    2. 在左侧面板中,选择“ SQLServer网络配置”并展开它
    3. 选择“ MSSQLServer协议”
    4. 在右侧面板中,单击“ TCP / IP”
    5. 在“协议”标签中,将“启用”设置为“是”
    6. 在“ IP地址”标签中,向下滚动
    7. 在“ IPAll”中,将“ TCP Port”设置为1433
  • d
    1. 打开“具有高级安全性的防火墙”
    2. 在右侧标签中,选择“入站规则”

在中间选项卡中找到“本地端口”为1433的记录,如果找不到,请尝试按以下级别创建它

  • 在“开始”菜单中,单击“运行”,键入“ WF.msc”,然后单击“确定”。
  • 在左侧面板中,单击“具有高级安全性的Windows防火墙”
  • 在右侧面板中,右键单击“入站规则”,然后单击“新规则”
  • 在“规则类型”对话框中,选择“端口”,然后单击“下一步”。
  • 在“协议和端口”对话框中,选择“ TCP”,然后选择“特定本地端口”,然后键入端口号1433,单击“下一步”。
  • 在“操作”对话框中,选择“允许连接”,然后单击“下一步”。
  • 在“配置文件”对话框中,选中“域”,“私有”和“公共”,然后单击“下一步”。
  • 在“名称”对话框中,键入“ SQL 1433端口”,并为描述写自己的描述。然后点击完成
  1. 然后在中间选项卡中,双击找到的项目(实例)或您创建的“ SQL 1433端口”名称的项目。
  2. 在打开的对话框中选择“范围”选项卡(SQL Server属性)
  3. 在本地PC中,在浏览器中转到google.com,然后搜索“我的IP”。
  4. 然后复制您的“ IP”
  5. 转到远程服务器,然后在“范围”选项卡的“ SQL Server属性”对话框中,在“远程IP地址”中选择“这些IP地址”选项,然后单击“添加”按钮
  6. 在打开的对话框(IP地址)中,选择“此IP地址或子网”选项并粘贴“ IP”,然后单击“确定”按钮。

7

该解决方案还解决了网络错误和SQL Server背后的服务

我在这里回答了类似的问题,您需要统计其他内容open Run type-> services.msc-在服务下-> sort by stopped您将看到一堆停止的SQL服务Right click and start

首先-有4个问题可能会导致常见的 LocalDb SqlExpress Sql Server连接错误 SQL Network Interfaces, error: 50 - Local Database Runtime error occurred,在开始之前,您需要将v11或v12重命名为(localdb)\ mssqllocaldb

我发现最简单的方法是执行以下操作-我已附上图片和步骤以寻求帮助。

首先验证您已安装的实例,可以通过检查注册表 运行cmd来执行此操作

  1. cmd> Sqllocaldb.exe i
  2. cmd> Sqllocaldb.exe s "whicheverVersionYouWantFromListBefore" 如果此步骤失败,则可以使用选项dcmd> Sqllocaldb.exe d“ someDb” 删除
  3. cmd> Sqllocaldb.exe c "createSomeNewDbIfyouWantDb"
  4. cmd> Sqllocaldb.exe start "createSomeNewDbIfyouWantDb"

SqlLOCALDb_edited.png


5

我遇到了同样的问题,问题是我在解决方案(WebDroid)中有多个项目,即使在Default project中选择了Package Manager Console它,它也使用了Droid项目中的连接字符串:

PM> update-database -Verbose
Using StartUp project 'Droid'. <-- DROID
Using NuGet project 'Web'. <-- WEB
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
<!-- BAD TARGET DATABASE -->
Target database is: 'DefaultConnection' (DataSource: .\SQLEXPRESS, Provider: System.Data.SqlClient, Origin: Convention).
System.Data.SqlClient.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)
   [REMOVED TEXT]
ClientConnectionId:00000000-0000-0000-0000-000000000000
Error Number:-1,State:0,Class:20
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)

Startup ProjectWeb和设置为和后Default ProjectPackage Manger Console我开始使用它。


5

我必须将SQL Server浏览器服务运行到SQL Server配置管理器中。没有此安装程序将无法发现新创建的服务。


1
我还没有,但是我越来越近了。在Visual Studio中执行此操作后,也断开连接并重新连接,仍然出现相同的错误,但现在至少从VS2015后面我无法创建表,而数据库创建的接缝现在可以运行。(一个,上面没有
黑叉

1
注意在您的命令之后,这将导致本地计算机上的服务器名称开始>运行> cmd> sqlcmd -L
user3800527

4

虽然上述解决方案在90%的情况下都可以使用,但是如果您仍在阅读此答案!!!您可能正在尝试连接到与预期不同的服务器。可能是由于配置文件指向的SQL服务器与您认为要连接的实际服务器不同。

至少发生在我身上。


1
也发生在我身上。在尝试诊断防火墙之前应检查一下。我有正确的连接字符串,但是在解决方案中运行了错误的项目……
VSO

4

我从Windows 7的工作笔记本电脑迁移到Windows 10的工作笔记本电脑。我已经在Windows 7上成功使用SSMS2016。

使用SSMS2012或SSMS2016也会遇到相同的问题。我使用Windows身份验证对10台sql服务器的访问仍然相同。我可以从另一台服务器进行测试。但是,10台服务器中有2台无法从我的笔记本电脑连接。两者都是ms sql server 9,但是我可以连接到其他sql server 9数据库。

解决方案是添加防火墙规则(使用具有高级安全性的Windows防火墙)。

为每个SSMS创建一个传入规则,例如C:\ Program Files(x86)\ Microsoft SQL Server \ 130 \ Tools \ Binn \ ManagementStudio \ Ssms.exe

我不是网络专家,所以我没有提供详细信息,但希望它将为您指明正确的方向。


错误msg(防火墙前规则)“建立与SQL Server的连接时发生与网络有关或特定于实例的错误。找不到服务器或无法访问该服务器。请验证实例名称正确且SQL Server配置为允许远程连接。(提供者:SQL网络接口,错误:26-错误指定了服务器/实例的位置)(。Net SqlClient数据提供程序)


4

为什么此错误如此烦人且嘈杂,仅因为它可以在各种情况下发生。

我已经在这里完成了以上所有方法,但仍然很烂。因此,在向下浏览之前,请确保您已完成与我相同的操作。

也许我无法立即解决您的问题,但是我可以向您指出一个方向或思考(您终于滑到了这里)。在确保实例名称正确无误并将数据库设置为允许按照上述方法进行远程控制之后,我开始考虑正在运行的程序的错误。之后,我怀疑我的SQL连接代码段出了点问题。

解决我的问题:

  • 检查我的sqlconnection功能

  • 点击查看其配置

  • 新建连接

在此处输入图片说明

  • 选择您的服务器名称

在此处输入图片说明

通过思考连接过程中到底发生了什么对我有用。希望我的想法会导致您消除错误。


这有助于我发现使用实体框架时需要删除LocalDB连接字符串的端口号。
ryanwebjackson

4

我尝试了该问题的所有其他答案,并且即使不是全部,也有一部分可能对我有用,但我仍然无法远程连接到数据库。我在Azure VM上使用SQL Server。

我最终想起了VM具有由Azure帐户代理控制的终结点,因此我转到Azure门户并添加了1433作为可用终结点,然后可以连接到SQL实例。

希望这对尝试过所有其他答案但仍然没有运气的人有所帮助!


4

摘要

若要解决在运行本地应用程序与远程数据库时遇到的问题,请使用SQL Server配置管理器为远程数据库添加别名。

细节

从Windows 7过渡到Windows 10笔记本电脑时,我最近遇到了这个问题。我正在运行本地开发和运行时环境,以访问远程服务器上的开发数据库。我们通过SQL Server客户端网络实用程序(cliconfg.exe)通过服务器别名设置访问Dev数据库。确认在该实用程序的64位和32位版本中都正确设置了别名,并且可以通过SSMS从新笔记本电脑访问数据库服务器之后,我仍然收到OP看到的错误(不是OP的IP地址)。课程)。

必须使用SQL Server配置管理器为远程Dev数据库服务器添加别名。修复问题。

在此处输入图片说明


4

您可以检查MS SQL Server 2014的服务状态。在Windows 7中,您可以通过以下方法进行检查:

  1. 转到搜索并键入“ SQL Server 2014 Configuration Manager
  2. 然后单击左侧菜单上的“ SQL Server服务”
  3. 检查SQL Server服务状态实例是否已停止或正在运行
  4. 如果已停止,请将状态更改为“运行”并登录到SQL Server Management Studio 2014

3

当我尝试将服务器从IIS Express更改为本地IIS(使用LocalDB时)时,我的问题开始了。

在此处输入图片说明

我正在使用LocalDB(出于开发目的),当我从本地IIS还原到IIS Express时,Visual Studio已将数据源从Data Source =(LocalDb)\ MSSQLLocalDB切换Data Source =。\ SQLEXPRESS

连接字符串不正确

<add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\SurveyTestsDB.mdf;Initial Catalog=SurveyTestsDB;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient" />

正确的连接字符串

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\SurveyTestsDB.mdf;Initial Catalog=SurveyTestsDB;Integrated Security=True" providerName="System.Data.SqlClient" />

希望这可以帮助某人。


也不要在连接字符串中使用/而不是\犯傻错误。
安德鲁·帕特

3

在尝试按照Teo Chuen Wei Bryan的建议进行操作时,请确保您还在连接字符串中引用了正确的服务器/实例名称。

如果在数据库服务器上或在web.config文件中使用主机名/实例的缩写形式,请确保使用完全限定的域名(FQDN)/实例

另外,要测试从不存在SQL Server客户端的服务器的连接,

->创建一个文本文件并将其文件扩展名更改为.udl

->右键单击该文件,您可以看到连接选项卡。

->输入服务器名称并登录信息以测试与数据库服务器的连接。

希望这可以帮助。


3

如果在生产环境中突然遇到此错误,请说以下内容,但没有任何变化,请按以下顺序尝试以下4个项目,看看是否已解决。

  1. 重新启动sql server服务。
  2. 重新启动正在调用sql server的服务(例如IIS)。(问题可能出在这里,如果从开始对SQL Server的服务调用到您最终获得响应错误之间的时间非常短(大约一或两秒)。
  3. 重新启动服务器sql server已打开。
  4. 重新启动正在打开呼叫服务的服务器。

3

当我在Visual Studio中遇到此错误时,

“建立与SQL Server的连接时发生了与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称正确,并且已将SQL Server配置为允许远程连接。(提供者:命名管道提供者,错误:40-无法打开与SQL Server的连接)”

...这是在执行以下C#代码期间,该代码试图获取我的SQL Server数据以在网格中显示它。中断恰好发生在显示connect.Open()的行上:

        using (var connect = Connections.mySqlConnection)
        {
            const string query = "SELECT Name, Birthdate, Narrative FROM Friends";
            using (var command = new SqlCommand(query, connect))
            {
                connect.Open();
                using (var dr = command.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        // blah
                    }
                }
            }
        }

这是无法解释的,因为SQL查询非常简单,我拥有正确的连接字符串,并且数据库服务器可用。我决定自己在SQL Management Studio中手动运行实际的SQL查询,它运行得很好,并产生了几条记录。但是查询结果中有一件事情引人注目:Friends表中的varchar(max)类型字段中有一些编码不正确的HTML文本(特别是,某些编码的注释符号<!--属于“ Narrative”列的数据)。可疑数据行如下所示:

Name    Birthdate    Narrative
====    =========    ============== 
Fred    21-Oct-79    &lt;!--HTML Comment -->Once upon a time...

请注意,编码的HTML符号“ &lt;”代表“ <”字符。不知何故,它进入了数据库,而我的C#代码无法识别它!它每次都在connect.Open()行失败!在我手动编辑数据库表Friends中的那一行数据并放入已解码的“ <”字符后,一切正常!该行应该是这样的:

Name    Birthdate    Narrative
====    =========    ============== 
Fred    21-Oct-79    <!--HTML Comment -->Once upon a time...

我使用下面的这个简单的UPDATE语句编辑了一个坏行。但是,如果您有几行令人讨厌的HTML编码行,则可能需要使用REPLACE函数的更精细的UPDATE语句:

UPDATE Friends SET Narrative = '<!--HTML Comment -->Once upon a time...' WHERE Narrative LIKE '&lt%'

因此,这个故事的寓意是(至少在我看来),在将HTML内容存储在数据库中之前先对其进行清理,这样一来,您就不会遇到这种神秘的SQL Server错误!(嗯,如果您需要更多信息,则另外一个讨论的主题是正确地清理/解码HTML内容,值得单独进行StackOverflow搜索!)



3

Web.config中的XML标记排列很重要

第一

<configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>

<connectionStrings>
  <add name="SqlConnectionString" connectionString="Data Source=.; Initial Catalog=TestDB; Trusted_Connection=True;" providerName="System.Data.SqlClient" />
</connectionStrings>

3

在我的情况下,MSSQLSERVER服务有问题,因此我重新启动了服务并解决了问题。

因此,我建议通过以下方式转到Services应用程序:Windows键,搜索“ Services”,然后在Microsoft SQL Server的通常找到“ SQL Server(MSSQLSERVER)”的 Sql实例。右键单击服务,然后单击启动,如果禁用,则单击重新启动。


2

当您的SQL Server实例为 stopped

转到所有程序> SQL Server>配置工具> SQL SERVER配置管理器

然后单击“ SQL服务器服务”,将出现实例列表,选择有问题的实例,然后单击顶部工具栏上的“播放”图标,希望对您有所帮助。

这个答案很晚(但总比没有好。)


2

我通过将使用Entity Framework的项目设置为启动项目来解决此问题,然后运行“ update-database”命令。

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.