Ошибка 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 ]

204 голосов
/ 21 июня 2010

У меня была эта ошибка, и я нашел несколько решений:

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

Если вы используете Entity Framework с транзакциями , Entity Framework автоматически открывает и закрывает соединение с каждым вызовом базы данных. Поэтому при использовании транзакций вы пытаетесь распределить транзакцию по нескольким соединениям. Это поднимается до MSDTC .

( См. Эту ссылку для получения дополнительной информации. )

Изменение моего кода на следующее исправило это:

using (DatabaseEntities context = new DatabaseEntities())
{
    context.Connection.Open();
    // the rest
}
38 голосов
/ 26 октября 2010

context.Connection.Open() не помогло решить мою проблему, поэтому я попытался включить «Разрешить удаленных клиентов» в конфигурации DTC, ошибки больше нет.

В windows 7 вы можете открыть конфигурацию DTC, запустив dcomcnfg, Службы компонентов -> Компьютеры -> Мой компьютер -> Координатор распределенных транзакций -> Щелкните правой кнопкой мыши локальный код неисправности -> Безопасность.

26 голосов
/ 05 мая 2015

Вы должны увидеть innerException , чтобы увидеть, что является внутренней причиной броска ошибка есть.

В моем случае исходная ошибка была:

Невозможно открыть физический файл "D: \ Projects2 \ xCU \ xCU \ App_Data \ xCUData_log.ldf". Ошибка операционной системы 5: «5 (доступ запрещен.)». Попытка присоединить базу данных с автоматическим именем для файла D: \ Projects2 \ xCU \ xCU \ App_Data \ xCUData.mdf не удалась. База данных с тем же именем существует, или указанный файл не может быть открыт, или он находится на общем ресурсе UNC.

, которая решена путем предоставления полного разрешения текущему пользователю на доступ к связанным файлам mdf и ldf с использованием свойств файлов.

23 голосов
/ 21 июля 2011

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

SERVER\SQLEXPRESS
SERVER

Когда я действительно должен иметь:

.\SQLEXPRESS

По какой-то причине я получаю сообщение об ошибке всякий раз, когда возникают трудности с поиском экземпляра SQL.

15 голосов
/ 26 сентября 2013

Это обычная проблема. Даже я сталкивался с этой проблемой. На машине разработки, настроенной с аутентификацией Windows, она работает отлично:

<add name="ShoppingCartAdminEntities" connectionString="metadata=res://*/ShoppingCartAPIModel.csdl|res://*/ShoppingCartAPIModel.ssdl|res://*/ShoppingCartAPIModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQlExpress;initial catalog=ShoppingCartAdmin;Integrated Security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

После размещения в IIS с той же конфигурацией я получил эту ошибку:

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

Исправлено изменение connectionString в файле конфигурации:

<add name="MyEntities" connectionString="metadata=res://*/ShoppingCartAPIModel.csdl|res://*/ShoppingCartAPIModel.ssdl|res://*/ShoppingCartAPIModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MACHINE_Name\SQlExpress;initial catalog=ShoppingCartAdmin;persist security info=True;user id=sa;password=notmyrealpassword;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Другие распространенные ошибки могут быть:

  1. Служба базы данных может быть остановлена ​​
  2. Атрибуты источника данных, указывающие на локальную базу данных с аутентификацией Windows и размещенные в IIS
  3. Имя пользователя и пароль могут быть неправильными.
10 голосов
/ 03 января 2013

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

Независимо от того, используете ли вы Integrated Security (контекст вошедшего в систему пользователя Windows) или отдельную учетную запись SQL, убедитесь, что у пользователя есть надлежащий доступ в разделе «Безопасность» к базе данных, к которой вы пытаетесь получить доступ, чтобы предотвратить эту проблему .

6 голосов
/ 27 марта 2012

У меня была похожая проблема с SQL Server Express Edition на Windows Server 2003 . Я просто добавил сетевой сервис как пользователь в базу данных безопасности.

4 голосов
/ 02 февраля 2013

Служба SQL Server Express не была запущена автоматически.

1) Перейти к панели управления 2) Административные инструменты 3) Сервис 4) Установите SQL Server Express для автоматического запуска, нажав на него 5) Щелкните правой кнопкой мыши и запустите услугу

Надеюсь, это поможет.

3 голосов
/ 05 ноября 2012

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

Чтобы исправить этот прогон:

USE your_database
EXEC sp_change_users_login 'Auto_Fix', 'user', NULL, 'cf'
GO
EXEC sp_change_users_login 'update_one', 'user', 'user'
GO
2 голосов
/ 25 апреля 2013

Я опубликовал аналогичную проблему здесь, работая с базой данных SQL 2012, размещенной на Amazon RDS.Проблема была в строке подключения - у меня были свойства "Имя приложения" и "Приложение" .После того, как я удалил их, все заработало.

Entity Framework 5 и Amazon RDS - «Основной поставщик не удалось открыть».

...