2016-05-02 4 views
1

Работа над проектом приложения формы окна с 2 разработчиками. Обмен исходными кодами через tfs заменил путь каталога данных на ключевое слово |DataDirectory|, так как каталоги данных различны на каждом ПК. (C:\Users\username\Documents\Visual Studio 20XX\Projects\solution folder\solution folder)C# Visual Studio: | DataDirectory | ключевое слово в строке соединения конфликты файлы mdf

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

class ConnectionManager 
{ 
     public static SqlConnection dbcon() 
     { 
      string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\systemdb.mdf;Integrated Security=True"; 
      SqlConnection con = new SqlConnection(connectionString); 
      con.Open(); 
      return con; 
     } 
} 

Проблема заключается в том, когда C# приложение отправляет данные в базу данных SQL Server, это показывает, что данные были добавлены в базу данных, но на самом деле база данных не обновляется.

Найдено, что строка соединения конфликтует файл .mdf, расположенный в корневой папке с .mdf, расположенной в bin\debug. SELECT запросы работают нормально при использовании |DataDirectory|. Запрос INSERT не работает при использовании |DataDirectory|, но отлично работает при использовании фактического пути к каталогу вместо |DataDirectory|.

Как решить эту проблему? Требования:

  1. не нужно изменять пути каталогов каждый раз после того, как получить последнюю версию с TFS, нужно что-то вроде |DataDirectory| всегда оставаться.

  2. Строка подключения не должна иметь конфликта с файлами .mdf в корневой папке и папке bin\debug.

ответ

0

Весь AttachDbFileName = подход является ошибочным - в лучшем случае! При запуске вашего приложения в Visual Studio он будет копировать файл .mdf (из вашего каталога App_Data в выходной каталог - обычно .\bin\debug - где вы запускаете приложение) и , скорее всего,, ваш INSERT работает нормально - но вы просто глядя на неправильный файл .mdf в конце!

Если вы хотите придерживаться такого подхода, попробуйте положить точку останова на вызов myConnection.Close(), а затем проверить файл .mdf с помощью SQL Server Mgmt Studio Express. Я почти уверен, что ваши данные есть.

реальное решение на мой взгляд, было бы

  1. установки SQL Server Express (и вы уже сделали это в любом случае)

  2. установки SQL Server Management Studio Express

  3. создать свою базу данных в SSMS Express, введите логическое имя (например, systemdb)

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

    Data Source=.\\SQLEXPRESS;Database=systemdb;Integrated Security=True 
    

    и все остальное точно же, как раньше ...

Смотрите также отличный пост в блоге Аарона Бертрана Bad habits to kick: using AttachDbFileName более справочная информация.