как опубликовать приложение Windows form с его базой данных на C#

#c# #sql #ado.net #windows-forms-designer

#c# #sql #ado.net #windows-forms-designer

Вопрос:

Я создаю приложение Windows form с его базой данных и хочу опубликовать его. приложение работает в моей системе так хорошо, но когда я запускаю его на другом КОМПЬЮТЕРЕ, оно показывает ошибки о невозможности подключения к своей базе данных. также я помещаю mdf и ldf-файл базы данных в папку программы, но мое приложение не работает.

и это моя строка подключения :

 string connectionSt = "Data Source=DESKTOP-NLKJ55F;Initial Catalog=IndustryContracts;Integrated Security=True";
  

Комментарии:

1. Какую базу данных вы используете? Допустили ли вы ошибку, используя серверную базу данных, такую как Sql Server, когда следовало использовать базу данных в процессе , такую как Sqlite или Access?

2. Я использовал sql server

3. Sql Server предназначен для одновременной поддержки многих пользователей. Он хочет постоянно работать в фоновом режиме на выделенном компьютере, используя много системной оперативной памяти для кэширования данных, даже когда ваше приложение не запущено. Оно имеет сложное развертывание, требующее разрешений администратора и включающее настройку свойств безопасности и подключения. Это действительно плохой выбор для локальной базы данных в приложении forms.

4. В большинстве случаев вы не публикуете базу данных (если только она не предназначена для статического поиска и т. Д.). Вместо этого я бы рекомендовал поместить строку подключения как в среду разработчика, так и в целевую машину (например, в .NET Core User Secrets или в переменную среды) и иметь базу данныхуже в том месте, которое вам нужно. Если схема базы данных изменяется, вы можете выполнить миграцию для нее (либо как ручной скрипт, либо как миграция EF).

5. Что такое строка подключения. Прикреплен ли файл mdf к серверу SQL или вы используете (LocalDB) AttachDatabase? Локальная база данных использует папку по умолчанию для базы данных. будет выглядеть следующим образом: AttachDBFilename=c:asdqwemydbfile.mdf. Локальная база данных предназначена для тех случаев, когда у вас нет сервера SQL, а база данных небольшая. Не используйте одновременно Server=myServerAddress; и AttachDBFilename.

Ответ №1:

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

В принципе: у вас неправильный подход. На самом деле база данных не предназначена для создания на каждом компьютере, на котором установлена программа. Скорее, идеальным вариантом использования базы данных является тот, который создается на сервере, и любое приложение, которому требуется его использовать, просто подключится к нему по какому-либо протоколу, например TCP. Это помогает с инкапсуляцией, а также делает ваше приложение более компактным.

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

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

Наконец, в качестве действительно обескураживающего способа сделать это и немного «грубого» подхода, вы можете скопировать сценарий создания базы данных, установить СУБД на свой целевой компьютер, запустить сценарий для создания БД, затем изменить строку подключения к БД в вашей программе в соответствии свновь созданный экземпляр, затем установите программу. Видите, насколько это было неуклюже?

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

Комментарии:

1. Я не согласен с первой частью. Базы данных отлично подходят для хранения локальных данных. Вам просто нужна база данных правильного типа . А именно, вам нужна база данных в процессе , такая как Sqlite или даже —gasp— MS Access (поскольку механизм Access уже доступен в Windows). Просто избегайте серверных продуктов, таких как Sql Server, MySQL, Oracle, Postgresql и т. Д. Для этой роли.

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

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