c # System.Data.SqlClient.SqlException (0x80131904) - PullRequest
0 голосов
/ 29 ноября 2018

Использование 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();.Вот несколько фактов о серверах:

  1. Сервер A и сервер B находятся в одной сети, и эта сеть не совпадает с моей базой данных MS SQL Server 2016.
  2. На сервере A установлен экземпляр MS SQL Server 2012, на сервере B на нем не установлен MS SQL Server.
  3. Несмотря на то, что моя программа работает правильно на сервере AI, не удается пропинговать IP-адрессервер базы данных MS SQL Server 2016 с сервера A или с сервера B.
  4. На сервере A или сервере B нет брандмауэров.
  5. На сервере 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, я получаю следующую ошибку:

enter image description here

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

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Попробуйте:

  • Щелкните правой кнопкой мыши на cmd
  • и выберите запуск от имени администратора
  • , затем введите в командной строке:

mofcomp "% programfiles (x86)% \ Microsoft SQL Server \ 140 \ Shared \ sqlmgmproviderxpsp2up.mof"

140 - это версия вашего сервера sql, измените ее на правильную версию, которую выпытаются использовать.

Это работает для меня, но я не уверен, что это ваша проблема

0 голосов
/ 29 ноября 2018

Этот тип ошибки обязательно должен быть результатом неправильной строки подключения.Убедитесь, что строки подключения одинаковы для серверов,

...