Установить расположение базы данных SQL Server Compact при публикации

У меня есть приложение Winforms, которое использует базу данных SQL Server Compact .SDF для хранения данных. Приложение отлично работает в Visual Studio при отладке, хотя, когда я использую параметр «Опубликовать» моего проекта и запускаю программу после установки, я всегда получаю сообщение об ошибке «Не удается найти файл базы данных».

Я установил строку подключения следующим образом

string fileName = System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, "Cellar.sdf");
connString = string.Format("Data Source={0};", fileName);

База данных Cellar.sdf находится в папке моей программы.

введите здесь описание изображения

Очевидно, что путь к базе данных неверен, но есть ли способ указать путь, по которому я хочу, чтобы мое приложение было установлено при использовании функции «Опубликовать», или какой-то способ узнать, куда попадает файл базы данных? скопировано? Каков правильный подход к включению файла локальной базы данных в настольное приложение?


person Daniel B    schedule 27.08.2013    source источник


Ответы (1)


Вы можете включить макрос DataDirectory и установить местоположение в подходящее место в коде.

connString = string.Format("Data Source=|DataDirectory|\{0};", fileName);

    private void Application_Startup(object sender, StartupEventArgs e)
    {
        // This is our connection string: Data Source=|DataDirectory|\Chinook40.sdf
        // Set the data directory to the users %AppData% folder
        // So the Chinook40.sdf file must be placed in:  C:\\Users\\<Username>\\AppData\\Roaming\\
        AppDomain.CurrentDomain.SetData("DataDirectory", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData));
    }

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

person ErikEJ    schedule 28.08.2013
comment
Я могу запустить строку кода, чтобы проверить, существует ли она, или скопировать ее туда, но как мне ее скопировать? Я знаю место назначения, но как узнать, где оно развертывается при установке? Если бы я мог сразу установить это местоположение, мне не нужно было бы его копировать. На мой взгляд, много работы, когда должна быть возможность просто выбрать место для размещения. - person Daniel B; 28.08.2013
comment
Если вам не требуется, чтобы база данных выдерживала обновления приложения, просто используйте DataDirectory без кода. - person ErikEJ; 28.08.2013
comment
Я закончил тем, что сделал это, string fileName = System.IO.Path.Combine(ApplicationDeployment.CurrentDeployment.DataDirectory, "Cellar.sdf"); Console.WriteLine(fileName); connString = string.Format("Data Source={0};", fileName); Хотя я бы посчитал ваше решение более правильным способом сделать это! - person Daniel B; 28.08.2013