我目前无法使用C#中的TCP / IP协议连接到远程SQL Server。
使用命名管道确实有效,但TCP / IP连接没有。令人沮丧的是,我可以使用Visual Studio 2015中的服务器资源管理器窗口中的TCP / IP协议连接到数据库,但我的代码不能,即使我正在复制并粘贴确切的连接字符串。
一旦我从连接字符串中删除“Network Library = dbmssocn”,代码就可以工作,但是这使得它使用命名管道,我不能依赖它作为开发环境之外的选项。
以防万一,我已经验证在SQL Server上启用了TCP / IP协议。这是有道理的,因为我可以在visual studio的服务器资源管理器窗口中指定TCP / IP协议,并且这些连接可以正常工作。
还为SQL身份验证和Windows身份验证配置了服务器。 Windows防火墙可能也不是问题,因为它目前已关闭。
以下是我正在使用的代码:
DbConnection testConnectionIntegrated = new SqlConnection("Data Source = MyServer; Initial Catalog = MyDatabase; Integrated Security = True; Encrypt = True; TrustServerCertificate = True; Network Library = dbmssocn");
try
{
Console.Write("Attempting to connect using Windows Authentication...");
testConnectionIntegrated.Open();
Console.WriteLine(testConnectionIntegrated.State);
}
catch (Exception caughtException)
{
Console.WriteLine("Integrated Security Connection Failed");
Console.WriteLine(caughtException.Message);
}
finally
{
Console.Write("Closing connection...");
testConnectionIntegrated.Close();
Console.WriteLine(testConnectionIntegrated.State);
}
DbConnection testConnectionSQLAuth = new SqlConnection("Data Source = MyServer; Initial Catalog = MyDatabase; Persist Security Info = True; User ID = my_user_name; Password = my_password; Encrypt = True; TrustServerCertificate = True; Network Library = dbmssocn");
try
{
Console.Write("Attempting to connect using SQL Authentication...");
testConnectionSQLAuth.Open();
Console.WriteLine(testConnectionSQLAuth.State);
}
catch (Exception caughtException)
{
Console.WriteLine("SQL Authentication Connection Failed");
Console.WriteLine(caughtException.Message);
}
finally
{
Console.Write("Closing connection...");
testConnectionSQLAuth.Close();
Console.WriteLine(testConnectionIntegrated.State);
}
这是我在两次连接尝试中看到的错误消息:
建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供程序:TCP提供程序,错误:0 - 在数据库查找期间发生了不可恢复的错误。)
有什么我想念的吗?
编辑: 我在服务器上验证了以下内容:
另外,我已经重新启动了我的开发机器,问题仍然存在。