С# System.Data.SqlClient.SqlException (0x80131904)C#

Место общения программистов C#
Ответить
Anonymous
 С# System.Data.SqlClient.SqlException (0x80131904)

Сообщение Anonymous »

Используя C#.net 4.6.1, у меня есть программа, в которой я пытаюсь запросить базу данных MS SQL Server 2016. У меня есть 2 удаленных сервера: сервер A и сервер B. Моя программа С# работает на сервере A без проблем. Когда я запускаю программу на сервере B, я получаю следующую ошибку:


System.Data.SqlClient.SqlException (0x80131904): При установлении соединения с
SQL Server произошла ошибка, связанная с сетью или
экземпляром. Сервер не найден или недоступен. Убедитесь, что
имя экземпляра правильное и что SQL Server настроен
на разрешение удаленных подключений. (поставщик: поставщик именованных каналов, ошибка:
40 — не удалось открыть соединение с SQL Server) ---> Syste
m.ComponentModel.Win32Exception (0x80004005): доступ запрещен в
System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdent
ityidentity, SqlConnectionString ConnectionOptions, SqlCredential
учетные данные, ObjectProviderInfo, String newPassword, SecureString
newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString
userConnectionOptions, SessionData reconnectSessionData,
пул DbConnectionPool, String accessToken, Boolean applyTra
nsientFaultHandling, SqlAuthenticationProviderManager
sqlAuthProviderManager) at
System.Data.SqlClient.SqlConnectionFactory.CreateConnection(параметры DbConnectionOp
, DbConnectionPoolKeypoolKey, Object
poolGroupProviderInfo, пул DbConn ectionPool, DbConnection
owningConnection, DbConnectionOptions userOptions)

at
System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConn
ectionPoolpool, DbConnection owningObject, DbConnectionOptions
options, DbConne ctionPoolKeypoolKey, DbConnectionOptions
userOptions) в
System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection
, владеющий объектом, DbConnectionOptions userOptions, DbConnectionInternal
oldConnection) в
System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection
o wningObject, DbConnectionOptions userOptions, DbConnectionInternal
oldConnection ) at
System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection
ow ningObject, UInt32 waitForMultipleObjectsTimeout, Boolean
allowCreate, Boolean o nlyOneCheckConnection, DbConnectionOptions
userOptions, DbConnectionInternal& соединение) в
System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection
owningObject, TaskCompletionSource

Код: Выделить всё

1 retry, DbConnectionOptions
userOptions, DbCon nectionInternal& connection)    at
System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection
owningConnection, TaskCompletionSource
1 повтор, DbConnectionOptions
userOptions, DbConnectionInternal oldConnection,
DbConnectionInternal& Connection) at
System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(Db
Connection externalConnection, DbConnectionFactory ConnectionFactory,
TaskCompletio nSource

Код: Выделить всё

1 retry, DbConnectionOptions userOptions)    at
System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection
outerConnection, DbConnectionFactory connectionFactory,
TaskCompletionSource
1 повтор, DbConnectionOptions userOptions) в
System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource

Код: Выделить всё

1
re try)    at
System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource
1
повтор) в System.Data.SqlClient.SqlConnection.Open() в
YetAnotherSmallConsoleApp.Program.Main(String[] args) в
C:\Repository\Pro
jects\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.
  • Даже хотя моя программа работает правильно на сервере A, я не могу проверить IP-адрес
    сервера базы данных MS SQL Server 2016 ни с сервера A, ни с сервера B.
  • На сервере A или сервере B нет брандмауэров.
  • И на сервере A, и на сервере B работает MS Server 2012 R2.
Это единственное, что я могу сравнить между сервером A и сервером B. Очевидно, что между сервером A и сервером B есть что-то разное, что позволяет программе успешно работать на сервере A. Я не знаю, настроено ли что-то по-другому на сервере A, что настроено по-другому на сервере B, или есть ли что-то настроенное на моем сервере базы данных MS SQL Server 2016, которое позволяет серверу A успешно подключаться к базе данных при запуске программы, но не позволяет программе подключаться к базе данных и успешно работать на сервере B. Если бы кто-нибудь мог дать мне какие-либо предложения о том, как устранить эту неполадку, чтобы иметь возможность получить программу для запуска на сервере Б. Я был бы очень признателен. Заранее спасибо.

РЕДАКТИРОВАТЬ: когда я пытаюсь подключиться к базе данных MS SQL Server 2016 с сервера B, используя те же учетные данные, которые я использую для подключения к базе данных с сервера A с помощью SSMS, я получаю следующую ошибку:

Изображение


РЕДАКТИРОВАНИЕ: еще одна вещь: я пытался запустить программу с именем компьютера для сервера базы данных MS SQL Server 2016 в строке подключения, а также с фактическим IP-адресом сервера базы данных в строке подключения. Оба способа приводят к успешному запуску программы на сервере A, но я получаю ошибку на сервере B.>

Подробнее здесь: https://stackoverflow.com/questions/535 ... 0x80131904
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»