Подтвердить что ты не робот

Попытка подключить базу данных с автоименованием для файла.... database1.mdf не удалось

Я получаю следующую ошибку при отладке моего сайта visual studio 2010:

Попытка присоединить базу данных с автоматическим именем для файла C:\Users...\Desktop\Dpp2012New\App_Data\dppdatabase.mdf не удалась. База данных с тем же именем существует, или указанный файл не может быть открыт, или он находится на общем ресурсе UNC.

Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.Data.SqlClient.SqlException: попытка присоединить базу данных с автоматическим именем для файла C:\Users...\Desktop\Dpp2012New\App_Data\dppdatabase.mdf не удалась. База данных с тем же именем существует, или указанный файл не может быть открыт, или он находится на общем ресурсе UNC.

Вот моя строка подключения из моего web.config:

<connectionStrings>
    <add name="ApplicationServices" 
         connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true" 
         providerName="System.Data.SqlClient"/>
    <add name="ConnectionString" 
         connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\dppdatabase.mdf;Integrated Security=SSPI" 
         providerName="System.Data.SqlClient"/>
</connectionStrings>

И я получаю к нему доступ с моего сайта как:

Dim connectionString As String = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString

Трассировка стека показывает строку ошибки как:

 Dim conn As New SqlConnection(connectionString)
 Dim dr As SqlDataReader
 conn.Open() 'This is the error line as per stacktrace

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

  1. http://weblogs.asp.net/scottgu/archive/2005/08/25/423703.aspx
  2. http://blogs.msdn.com/b/webdevelopertips/archive/2010/05/06/tip-106-did-you-know-how-to-create-the-aspnetdb-mdf-file.aspx
  3. http://forums.asp.net/t/1033225.aspx

Я с нетерпением жду решения.

4b9b3361

Ответ 1

У меня тоже была эта проблема, и это было больно. Я настроил строку подключения и смог решить проблему. В строке подключения я заменил значение | DataDirectory |\dbfilename.mdf для свойства AttachDbFilename с указанием пути к файлу. | DataDirectory | может использоваться только в том случае, если файл базы данных находится в папке App_Data внутри того же проекта.

Таким образом, изменив свойство AttachDbFilename на прямой путь к файлу mdf, я исправил свою проблему.

AttachDbFilename = C:\MyApp\App\ДАЛ\db.mdf

Я надеюсь, что это сработает для вас.

Ответ 2

Попробуйте создать строку подключения, как показано ниже:

 <add name="ECommerce" connectionString="Data Source=(localdb)\v11.0;Initial Catalog=C:\USERS\dL\DESKTOP\DATABASE\MYSHOP.MDF;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False" providerName="System.Data.SqlClient"/>

Это работает для меня.

Ответ 3

У меня была аналогичная ошибка, но с использованием соединения, настроенного в коде, а не файла конфигурации. Решение для меня было просто добавить часть "Начальный каталог = MyDatabase". Теперь мой код выглядит как...

DbConnection connection = new SqlConnection(String.Format(@"Data Source=.\SQLEXPRESS; Integrated Security=SSPI; AttachDbFilename={0}; User Instance=True; Initial Catalog=IPDatabase;", Location));

Местоположение - это полный путь к файлу mdb, который еще не существует.

Ответ 4

<add name="Connections" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient"/>

Ответ 5

Одна из самых неприятных ошибок при разработке веб-приложений в .NET. У меня была эта проблема в проекте, который я делал год назад. Это то, что сработало для меня: я вошел в систему с учетной записью sa в SQL Management Studio и привязал базу данных к проводнику объектов (Базы данных → Щелкните правой кнопкой мыши → Прикрепить). Затем я открыл Security- > Logins → [myWindowsUsername] и отредактировал вкладку "Сопоставления пользователей", предоставив права dbowner на присоединенную базу данных.

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

Ответ 6

проверьте свой файл веб-конфигурации, может быть несколько строк соединения с таким же именем

Ответ 7

Mine был первым проектом EF-кода, и он появляется, когда файл был удален. Запуск Update-Database из консоли диспетчера пакетов делает базу данных и ее штраф.

Ответ 8

Ошибка была исправлена ​​для меня после того, как я изменил этот

ConfigurationManager.ConnectionStrings[0].ConnectionString

к этому

ConfigurationManager.ConnectionStrings["myconnection"].ConnectionString

Ответ 9

Я установил папку установки из файлов программы в каталог C, пока я устанавливаю приложение. то моя проблема решена.

Ответ 10

Я думаю, причина в том, что в вашем каталоге базы данных содержится файл .mdf с таким же именем. Лучше всего дать полный путь, который вы можете просто заменить AttachDbFilename. просто получите полный путь к файлу базы данных и назначьте его в AttachDbFilename, которое находится в файле app.config.

Ответ 11

В большинстве случаев проект unit test отделен от основного проекта. Это приводит к тому, что сгенерированная строка соединения является недопустимой, поскольку она не может найти папку app_data, если ваш db является локальным для решения.

Вы можете просто заменить DataDirectory | с относительным путем к вашему db в вашем основном проекте, если вам нужно подключиться к нему из вашего проекта unit test.

Ответ 12

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

Ответ 13

Я пытаюсь переносить mdf в моем приложении, поэтому я использовал

    public DbContext IoDatabase()
    {
        var directory = System.IO.Directory.GetCurrentDirectory();
        var connectionString = @"Data Source=(localdb)\mssqllocaldb;AttachDbFilename=" + directory + "\\App_Data\\ITIS.mdf;Integrated Security=True;Connect Timeout=30;";
       return  new NerdDinners(connectionString);
    }

с nerdDinners, я не могу вспомнить, где я его нашел, будучи

public class NerdDinners : DbContext
{
    public NerdDinners(string connString)
    {
        Database.Connection.ConnectionString = connString;
    }
}

Затем я могу использовать возвращаемый тип как DbContext.

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

Ответ 14

У меня была такая же проблема с EF. Решение абсолютного пути сработало. Но это не очень хорошее решение, если вы хотите переместить вашу программу в новое место. Для меня это было проблемой.

  1. VS ищет файл mdf в папке отладки
  2. В папке проекта .mdf файл .mdf, иногда VS синхронизирует два файла
  3. По какой-то причине .mdf файл не был синхронизирован в Debug

Мой обходной путь:

  1. Скопируйте .mdf и .ldf файл в папку темп
  2. Установите соединение для этого в vs/server explorer
  3. При добавлении ADO.NET используйте новое соединение
  4. VS предлагает скопировать файл .mdf в папку проекта, принять его
  5. Теперь файл .mdf появится и в папке отладки.
  6. Удалите соединение для временной папки, создайте новое в папке проекта

Ответ 15

то, что я нашел до сих пор, чтобы решить проблему, если вы создадите mdf файл описанным ниже способом, он отлично подойдет для visual studio.

Щелкните правой кнопкой мыши соединение для передачи данных на сервере Explorar-> добавьте connection-> выберите файл базы данных Microsoft SQL Server, выберите имя базы данных и выберите okay. Тогда эта проблема не возникает. Следуйте за видео: ссылка на YouTube

Ответ 16

Похоже, для этого есть много причин... Здесь была моя.

Подсказка была в последней строке сообщения об ошибке...

System.Data.SqlClient.SqlException: 'Попытка присоединить базу данных с автоматическим именем для файла Q:\Folder\FileName.mdf не удалась. База данных с тем же именем существует, или указанный файл не может быть открыт, или он находится на общем ресурсе UNC. '

...or it is located on UNC share.

В попытке воспроизвести производственную среду... У меня изначально был физический диск Q :. После того, как моя машинка зашла в тупик.. Я перестроил и просто создал подключенный диск. Начал получать эту ошибку... а затем вернулся и просто создал еще один раздел Q: и проблема была решена.

Ответ 17

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

Наконец, все, что мне нужно было сделать, - это просмотреть свойства базы данных, скопировать путь, указанный в разделе "identity", и заменить его на "AttachDbFilename =".

Работало просто отлично.

Ответ 18

Попробуйте это, у меня это работает

try {
    String ConnectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\App_Data\Test.mdf;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True";
    SqlConnection connection = new SqlConnection(ConnectionString);
    connection.Open();
    MessageBox.Show("Connection is opened.!!");
    connection.Close();
} catch(Exception ex)
{
    MessageBox.Show(ex.Message);
}

Ответ 19

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

<connectionStrings>
  <add name="ApplicationServices"
    connectionString="data source=.\SQLEXPRESS;
                      Integrated Security=SSPI;
                      AttachDBFilename=|DataDirectory|\aspnetdb.mdf;
                      User Instance=true"
    providerName="System.Data.SqlClient" />
  <add 
    name="NorthwindConnectionString1" 
    connectionString="Data Source=localhost;
                      Initial Catalog=Northwind;
                      Integrated Security=True" 
    providerName="System.Data.SqlClient" />
</connectionStrings> 

Теперь первый

<add 
  name="ApplicationServices" 
  connectionString="data source=.\SQLEXPRESS;
                    Integrated Security=SSPI;
                    AttachDBFilename=|DataDirectory|\aspnetdb.mdf;
                    User Instance=true"
  providerName="System.Data.SqlClient" />

- это то, что появляется по умолчанию в файле web.config. Оставьте его неизменным и добавьте еще одну строку подключения

 <add
   name="NorthwindConnectionString1" 
   connectionString="Data Source=localhost;
                     Initial Catalog=Northwind;
                     Integrated Security=True"
   providerName="System.Data.SqlClient" />

с вашими параметрами. Это работает для меня. Надеюсь, что это поможет.