Ошибка MSSQL. Исходный провайдер не смог открыть Open '

Я использовал .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" />

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

Недопустимый базовый поставщик при открытии

Ответ 1

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

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

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

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

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

using (DatabaseEntities context = new DatabaseEntities())
{
    context.Connection.Open();
    // the rest
}

Ответ 2

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

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

Ответ 3

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

SERVER\SQLEXPRESS
SERVER

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

.\SQLEXPRESS

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

Ответ 4

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

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

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

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

Ответ 5

Это обычная проблема. Даже я столкнулся с этой проблемой. На машине разработки, настроенной с проверкой подлинности 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" />

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

  • Служба базы данных может быть остановлена ​​
  • Атрибуты источника данных, указывающие на локальную базу данных с проверкой подлинности Windows и размещенные в IIS
  • Имя пользователя и пароль могут быть неправильными.

Ответ 6

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

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

Ответ 7

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

Ответ 8

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

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

USE your_database
EXEC sp_change_users_login 'Auto_Fix', 'user', NULL, 'cf'
GO
EXEC sp_change_users_login 'update_one', 'user', 'user'
GO

Ответ 9

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

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

Я надеюсь, что это поможет.

Ответ 10

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

Ответ 11

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

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

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

Ответ 12

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

Ответ 14

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

Ответ 15

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

операция недействительна для состояния транзакции

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

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

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

Ответ 16

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

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

Ответ 17

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

В IIS:

  • Найдите пул приложений, нажав на свой сайт и перейдя в "Основные настройки".

  • Перейдите в пулы приложений.

  • Нажмите на пул приложений вашего сайта.

  • Нажмите "Дополнительные настройки".

  • В Identity введите учетную запись и пароль.

  • Перезагрузите свой сайт и повторите попытку.

Ответ 18

У меня была такая же проблема, но то, что сработало для меня, было удаление этого из строки подключения:

persist security info=True

Ответ 19

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

Ответ 20

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

Ответ 21

Для меня это была просто ошибка:

Я использовал Amazon EC2, и я использовал свой эластичный IP-адрес в строке подключения, но когда я изменил IP-адреса, я забыл обновить свои строка подключения.

Ответ 22

У меня внезапно возникла эта ошибка внезапно на одном из наших сайтов. В моем случае оказалось, что пароль пользователя SQL истек! Отключить окно срока действия пароля в SQL Server Management Studio сделал трюк!

Ответ 23

У меня была аналогичная проблема: в моих тестах я всегда получал эту ошибку. Я узнал, что моя "Служба распределенных транзакций" не была запущена (запустите: services.msc → start "Distributed Transaction Service" (лучше всего настроить ее на автоматический запуск)). После того, как я это сделал, он работал как шарм...

Ответ 24

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

Ответ 25

У меня была такая же проблема несколько дней назад, используя "Integrated Security = True"; в строке соединения вам нужно запустить идентификатор пула приложений в разделе "localsystem". Конечно, это не рекомендуется, но для тестирования он выполняет задание.

Вот как вы можете изменить идентификатор в IIS 7: http://www.iis.net/learn/manage/configuring-security/application-pool-identities

Ответ 26

В IIS установите Идентификатор учетной записи пула приложений как учетная запись службы или учетная запись администратора или учетная запись ant, у которой есть разрешение на выполнение операции над этой базой данных.

Ответ 27

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

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

Ответ 28

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

Ответ 29

Я также имел эту ошибку, если имя экземпляра 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 в моей dev-блоке для размещения разных проектов:

 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"

Ответ 30

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