使用TCP / IP连接到SQL Server 2008

时间:2010-03-05 15:58:26

标签: sql-server sql-server-2008 database-connection

当我尝试从SQL Server Management Studio连接TCP / IP时出现以下错误。我需要一步一步的描述来解决我的问题。这有什么不对?

Cannot connect to 
===================================

A network related or instance specific error when a connection to SQL Server...
(provider: Named pipe-provider, error: 40 -  SQL Server)
(.Net SqlClient Data Provider)

------------------------------
For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&EvtSrc=MSSQLServer&EvtID=53&LinkId=20476

------------------------------
Error Number: 53
Severity: 20
State: 0

------------------------------
Program Location:

   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnection owningObject)
   at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)
   at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
   at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
   at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
   at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
   at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
   at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
   at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.SqlClient.SqlConnection.Open()
   at Microsoft.SqlServer.Management.UI.VSIntegration.ObjectExplorer.ObjectExplorer.ValidateConnection(UIConnectionInfo ci, IServerType server)
   at Microsoft.SqlServer.Management.UI.ConnectionDlg.Connector.ConnectionThreadUser()

9 个答案:

答案 0 :(得分:17)

我经常忘记的是,即使您在SQLServerNetwork-> MSSQLServer协议中将tcp标记为已启用,您仍然需要为服务器启用可能不同的IP地址。即使是具有单个NIC的服务器也将具有多个IP地址。

  1. 单击上面列出的MSSQLServer协议。
  2. 然后在右侧窗格中启用TCP / IP。
  3. 现在双击TCP / IP以获取对话窗口。
  4. 如果要侦听服务器的所有IP地址,请在中选择“是” 在第一个协议选项卡上收听全部框;否则
  5. 选择“IP地址”选项卡,然后通过设置“已启用”启用所需的IP地址 是的。
  6. enter image description here

答案 1 :(得分:13)

当您检查SQL Server网络配置(Start Menu > Microsoft SQL Server > Configuration Tools > SQL Server Configuration Manager > SQL Server Network Configuration)时,您看到了什么?

alt text http://i50.tinypic.com/5lpcpk.png

您的服务器上是否真的启用了TCP / IP协议?它默认是关闭的,并且在大多数情况下保持关闭状态(除非你专门打开它)。

仅使用基于IP的服务器地址并不意味着您使用TCP / IP协议进行连接....请检查http://www.connectionstrings.com/sql-server-2008以获取使用的示例连接字符串TCP / IP:

Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword;

密钥是Network Library=DBMSSOCN;,它告诉您的代码使用TCP / IP进行连接。

答案 2 :(得分:8)

还值得检查SQL Server Browser服务是否正在运行,因为TCP / IP连接将使用此服务

答案 3 :(得分:4)

请访问www.connectionstrings.com。错误消息看起来像您正在使用命名管道而不是tcp / ip。不要忘记您必须在SQL Server的服务器上明确启用TCP / IP。

答案 4 :(得分:3)

有一个很好的演练来配置它,包括

  • 为数据库服务器启用TCP / IP协议
  • 启用数据库服务器的远程连接
  • 允许TCP流量通过防火墙

http://blogs.msdn.com/b/walzenbach/archive/2010/04/14/how-to-enable-remote-connections-in-sql-server-2008.aspx

答案 5 :(得分:2)

您是否200%确定您的服务器已设置为通过TCP / IP接受连接?

答案 6 :(得分:0)

按照:

开始 - >程式 - > Microsoft SQL Server 2008 - >配置工具 - > SQL Server配置管理器

SQL Server网络配置 - > [SQLInstanceName]

的协议

右键单击TCP / IP - >使

答案 7 :(得分:0)

如果已启用TCP / IP,则听起来好像防火墙阻止了连接。打开相关端口,它应该可以工作。

您应该检查连接两端的防火墙。

答案 8 :(得分:-1)

并且 - 您可以在SQL Server配置管理器的协议屏幕中更改它,但在重新启动sql server服务之前它不会生效。我只是重新启动 - 这是确定的唯一方法(外星人参考那里:)