Использование c # .net 4.6.1 У меня есть программа, в которой я пытаюсь запросить базу данных MS SQL Server 2016.У меня есть 2 удаленных сервера, сервер A и сервер B. Моя программа c # работает на сервере A без проблем.Когда я запускаю программу на Server BI, появляется следующая ошибка:
System.Data.SqlClient.SqlException (0x80131904): во время установления соединения с SQL возникла ошибка, связанная с сетью или экземпляром.Сервер.Сервер не найден или не был доступен.Убедитесь, что имя экземпляра указано правильно, и что SQL Server настроен для разрешения удаленных подключений.(поставщик: поставщик именованных каналов, ошибка: 40 - не удалось открыть соединение с SQL Server) ---> Syste m.ComponentModel.Win32Exception (0x80004005): доступ запрещен в System.Data.SqlClient.SqlInternalConnectionTds..ctor (DbConnectionPoolIdent идентичность итй, SqlConnectionString connectionOptions, SqlCredential учетных данных, вывода ▪ Таблица providerInfo, Строка новый_пароль, SecureString newSecurePassword, булева redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData г econnectSessionData, DbConnectionPool бассейн, Строка маркер доступа, булева applyTra nsientFaultHandling, SqlAuthenticationProviderManager sqlAuthProviderManager) в System.Data.SqlClient.SqlConnectionFactory.CreateConnection (параметры DbConnectionOp, DbConnectionPoolKey poolKey, объект poolGroupProviderInfo, пул DbConn ectionPool, DbConnection owningConnection, DbConnectionOptions userOptions)
DbConnection.Connection.владение параметрами Object, DbConnectionOptions, DbConne ctionPoolKey poolKey, DbConnectionOptions userOptions) в System.Data.ProviderBase.DbConnectionPool.CreateObject (DbConnection, принадлежащий объекту, DbConnectionOptions, userOestuserOptions, DbConnectionInternal oldConnection) в System.Data.ProviderBase.DbConnectionPool.TryGetConnection (DbConnection ква ningObject, UInt32 waitForMultipleObjectsTimeout, Boolean, Boolean allowCreate Ø nlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal & сотрудничества) при ть соединение System.Data.ProviderBase.DbConnectionPool.TryGetConnection (DbConnection влningObject, TaskCompletionSource
1 retry, DbConnectionOptions
userOptions, DbCon nectionInternal& connection) at
System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection
owningConnection, TaskCompletionSource
1 повтор, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal & connection) в System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal (подключение к Db 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.SqlotherAn.Access.OneConline..Main (String [] args) в C: \ Repository \ Pro jects \ YetAnotherSmallConsoleApp \ YetAnotherSmallConsoleApp \ Program.cs: строка 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, не удается пропинговать 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. Если кто-то может дать мне какие-либо предложения по устранению неполадок, чтобы иметь возможность запустить программу на Server BI, был бы очень признателен.Заранее спасибо.
РЕДАКТИРОВАТЬ: при попытке подключиться к базе данных MS SQL Server 2016 с сервера B с использованием тех же учетных данных, которые я использую для подключения к базе данных с сервера A с использованием SSMS, я получаю следующую ошибку:
РЕДАКТИРОВАТЬ: еще одна вещь: я попытался запустить программу с именем компьютера для сервера базы данных MS SQL Server 2016 в строке подключенияа также фактический IP-адрес для сервера базы данных в строке подключения, оба способа приводят к возможности успешного запуска программы на сервере A, но я получаю ошибку на сервере B.