Ошибка MSSQL «Основной поставщик не удалось открыть» - PullRequest
205 голосов
/ 19 марта 2010

Я использовал .mdf для подключения к database и entityClient. Теперь я хочу изменить строку подключения, чтобы не было файла .mdf.

Правильно ли следующее connectionString?

<connectionStrings>
   <!--<add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQL2008;AttachDbFilename=|DataDirectory|\NData.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />-->
   <add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQL2008;Initial Catalog=NData;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

Потому что я всегда получаю ошибку:

Основной провайдер не удалось открыть

Ответы [ 39 ]

2 голосов
/ 31 января 2014

Убедитесь, что каждое значение элемента в строке подключения указано правильно. В моем случае я получал ту же ошибку, потому что имя каталога (имя базы данных), указанное в строке подключения, было неверным.

1 голос
/ 09 мая 2013

Определение нового правила брандмауэра Windows для SQL Server (и для порта 1433) на компьютере сервера устраняет эту ошибку (если ваше имя сервера, имя пользователя или пароль не верны в строке подключения ...).

1 голос
/ 29 августа 2012

Я избавился от этого, сбросив IIS , но все еще используя Integrated Authentication в строке подключения.

1 голос
/ 27 февраля 2012

У меня была похожая проблема с исключениями из-за состояния соединения, затем я понял, что моя переменная класса обслуживания домена помечена как статическая (по ошибке).

Я предполагаю, что после загрузки библиотеки служб в память каждый новый вызов заканчивается использованием одного и того же значения статической переменной (экземпляра службы домена), что вызывает конфликты через состояние соединения.

Я также думаю, что каждый клиентский вызов приводил к созданию нового потока, поэтому несколько потоков, обращающихся к одному и тому же экземпляру службы домена, приравнивались к аварии поезда.

1 голос
/ 04 ноября 2013

Если вы столкнулись с этой ошибкой в ​​веб-приложении ASP.NET, в дополнение к другим упомянутым элементам проверьте следующее:

  1. Разрешения безопасности пользователя базы данных (каким пользователям разрешен доступ к вашей базе данных.
  2. Проверьте пул приложений в IIS и убедитесь, что он является правильным, которому разрешен доступ к вашей базе данных.
1 голос
/ 30 сентября 2013

У меня была похожая ошибка с внутренним исключением, как показано ниже:

операция недопустима для состояния транзакции

Я могу решить эту проблему, включив настройки безопасности DTC.

Перейти к свойствам кода неисправности, на вкладке "Безопасность", проверьте ниже

  • Доступ по сети DTC
  • Разрешить удаленных клиентов
  • Связь с менеджером транзакций
  • Разрешить входящий
  • Разрешить исходящий
0 голосов
/ 27 апреля 2016

У меня также была такая ошибка, если имя экземпляра SQL Server не указано и на хосте SQL установлено несколько экземпляров SQL. Вот пара примеров, чтобы уточнить:

Строка подключения, приведенная ниже, приводит к исключению «Ошибка основного поставщика при открытии» без внутреннего исключения в приложении .NET WebForms:

 connectionString="metadata=res://*/Entities.csdl|res://*/Entities.ssdl|res://*/Entities.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=localhost;Initial Catalog=Entities;User ID=user;Password=password;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient"

Следующая строка подключения выполняется, как и ожидалось, в приложении .net WebForms, где среда SQL имеет несколько экземпляров. Редко я знаю, но у меня есть несколько разных экземпляров SQL на моем компьютере разработчика для разных проектов:

 connectionString="metadata=res://*/Entities.csdl|res://*/Entities.ssdl|res://*/Entities.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=localhost\SQLSERVER2014;Initial Catalog=Entities;User ID=user;Password=password;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient"
0 голосов
/ 14 апреля 2016

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

0 голосов
/ 04 ноября 2015

В моем случае у меня было несоответствие между именем строки подключения, которое я регистрировал в конструкторе контекста, и именем в моем web.config. Простая ошибка, вызванная копированием и вставкой: D

    public DataContext()
        : base(nameOrConnectionString: "ConnStringName")
    {
        Database.SetInitializer<DataContext>(null);
    }

0 голосов
/ 02 октября 2015

@ majidgeek ответ содержит наиболее полезную информацию: проверьте свойство InnerException. В моем случае у InnerException была собственная InnerException, которая указала мне на проблему: брандмауэр Windows блокировал MSDTC. Как только я включил правила входящих и исходящих сообщений для координатора распределенных транзакций, все стало хорошо.

...