c# - c# System.Data.SqlClient.SqlException (0x80131904)
问题描述
使用 c# .net 4.6.1 我有一个程序试图查询 MS SQL Server 2016 数据库。我有 2 台远程服务器,服务器 A 和服务器 B。我的 c# 程序在服务器 A 上运行没有问题。当我在服务器 BI 上运行程序时,出现以下错误:
System.Data.SqlClient.SqlException (0x80131904):建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接)---> Syste m.ComponentModel.Win32Exception (0x80004005):访问在 System.Data.SqlClient.SqlInternalConnectionTds..ctor( DbConnectionPoolIdentity 身份、SqlConnectionString connectionOptions、SqlCredential credential、对象 providerInfo、String newPassword、SecureString newSecurePassword、Boolean redirectedUserInstance、SqlConnectionString userConnectionOptions、SessionData r econnectSessionData、
在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool 池,DbConnection owningObject,DbConnectionOptions 选项,DbConne ctionPoolKey poolKey,DbConnectionOptions userOptions)在 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection 拥有对象,DbConnectionOptions userOptions,DbConnectionInternal oldConnection)在System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owingObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection ow ningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean o nlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& co nnection) 在 System.Data.ProviderBase。DbConnectionPool.TryGetConnection(DbConnection owingObject, TaskCompletionSource
1 retry, DbConnectionOptions userOptions, DbCon nectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource
在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(Db Connection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 retry, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource
1 次重试, DbConnectionOptions userOptions , DbConnectionInternal oldConnection, DbConnectionInternal& connection) 在 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource1 re try) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource
1 次重试)在 System.Data.SqlClient.SqlConnection.Open() at YetAnotherSmallConsoleApp.Program.Main(String[] args) 在 C:\Repository\Projects\YetAnotherSmallConsoleApp\YetAnotherSmallConsoleApp\Program.cs:line 28 ClientConnectionId:00000000- 0000-0000-0000-000000000000
这是我的程序:
using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.IO;
namespace YetAnotherSmallConsoleApp
{
class Program
{
static void Main(string[] args)
{
SqlConnection con = new SqlConnection("Server = IP_ADDRESS; User Id = USER_NAME; Password = PASSWORD;");
string[] arrExcludeLines = File.ReadAllLines(FILEPATH_TO_QUERY);
string strExcludeQuery = default(string);
foreach (string line in arrExcludeLines)
{
strExcludeQuery = strExcludeQuery + line + Environment.NewLine;
}
try
{
using (con)
{
con.Open();
SqlCommand cmdExclude = new SqlCommand(strExcludeQuery, con);
SqlDataReader dr1 = cmdExclude.ExecuteReader();
while (dr1.HasRows)
{
while (dr1.Read())
{
Console.WriteLine(dr1[0].ToString());
Console.ReadLine();
}
dr1.NextResult();
}
}
}
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
Console.ReadLine();
}
}
}
}
错误是从读取的行引发的con.Open();
。以下是有关服务器的一些事实:
- 服务器 A 和服务器 B 都在同一个网络上,并且这个网络不是我的 MS SQL Server 2016 数据库所在的同一个网络。
- 服务器 A 上安装了 MS SQL Server 2012 实例,服务器 B 上没有安装 MS SQL Server。
- 即使我的程序在服务器 AI 上正确运行,也无法从服务器 A 或服务器 B ping MS SQL Server 2016 数据库服务器的 IP 地址。
- 服务器 A 或服务器 B 上没有防火墙。
- 服务器 A 和服务器 B 都运行 MS Server 2012 R2。
这些是我唯一能想到的比较服务器 A 和服务器 B 的东西。显然服务器 A 和服务器 B 之间存在一些不同之处,这使得程序可以在服务器 A 上成功运行。我不知道是否有什么东西在服务器 A 上配置不同,在服务器 B 上配置不同,或者如果在我的 MS SQL Server 2016 数据库服务器上配置了某些内容,允许服务器 A 在程序运行时成功连接到数据库,但阻止程序连接到数据库并在服务器 B 上成功运行。如果有人能给我任何关于如何解决此问题以使程序在服务器 BI 上运行的建议,将不胜感激。提前致谢。
编辑:当我尝试使用与使用 SSMS 从服务器 A 连接到数据库相同的凭据尝试从服务器 B 连接到 MS SQL Server 2016 数据库时,我收到以下错误:
编辑:另一件事:我尝试使用连接字符串中的 MS SQL Server 2016 数据库服务器的计算机名称以及连接字符串中数据库服务器的实际 IP 地址运行程序,这两种方式都会导致能够在服务器 A 上成功运行程序,但在服务器 B 上出现错误。
解决方案
这种类型的错误肯定是由错误的连接字符串引起的。确认以确保服务器的连接字符串相同,
推荐阅读
- hibernate - 我的 spring-boot 2.x 项目出现运行时错误(java.lang.AbstractMethodError),如以下消息
- android - google play 保护申诉下载链接问题
- html - Bootstrap 3.3.7:col-xs 无效
- r - dplyr::lag() 的反向函数,它根据数据返回偏移量
- c++ - C ++中的“类之前的预期类型说明符”错误
- python - 当我在谷歌驱动器中列出文件时,我得到了额外的文件
- mysql - 如何从mysql数据库中选择随机记录
- php - mysqli_query 不向表中插入数据
- java - 由于输入错误,清除编辑文本
- java - java中“while”之前和“break”命令之后的名称是什么意思?