Deabae Ответов: 1

Приложение C# win form не запускается на другой машине


привет

у меня есть приложение win form, написанное на c# в Visual Studio 2017.

это простая форма регистрации клиента с Linq to SQL, которая использует файл базы данных .mdf, хранящийся в папке \bin\debug.

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

это сообщение об ошибке
сообщение об ошибке

Что я уже пробовал:

connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\SQLDB2mdf.mdf;Integrated Security=True;Connect Timeout=30"

1 Ответов

Рейтинг:
0

OriginalGriff

На это есть несколько причин.
Во-первых, только Экспресс-выпуски SQL Server поддерживают подключенные базы данных: это специальный режим "отладки", который запускает новый отдельный экземпляр SQL server для его поддержки. Вы никогда не должны пытаться использовать его для производства, только для развития.
Во-вторых, ваш код требует, чтобы файл находился в каталоге данных, а ваше объяснение говорит, что он находится в папке исполняемого файла.
В-третьих, если ваша БД находится в папке bin/debug, она все равно не будет доступна SQL server, так как не работает под вашим идентификатором пользователя.
Четвертый-если он находится в папке исполняемого файла, то не может быть записан в производство, так как он будет находиться в папке Program Files, которая ограничена на запись, поэтому, когда SQL Server попытается открыть ее для доступа на чтение/запись, он получит нарушение доступа.
Пятое-это то, что ваша строка соединений требует, чтобы экземпляр SQL server был локальным, то есть на том же компьютере, что и клиент. Это означает, что клиент не только должен иметь SQL Server, установленный на каждом компьютере, но и что данные для входа не могут быть разделены между машинами: каждый компьютер будет иметь свой собственный набор Логинов.

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


Deabae

я установил SQL server express edition, но это ничего не изменило.( это MS SQL server 2012 express LocalDB, ссылка на изображение: http://www.w3-farsi.com/forum/?qa=blob&qa_blobid=2680117458751047859)
что вы имеете в виду под каталогом данных? это та папка, в которой находится папка "bin"?
я установил некоторые sql-компоненты целевого ПК, пожалуйста, смотрите изображение выше.

OriginalGriff

Каталог данных-это то место, где вы указываете, что файл хранится:
AttachDbFilename=|DataDirectory|\SQLDB2mdf.mdf;


Но ты явно не понял, что я сказал, не так ли?

Deabae

конечно,

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

CHill60

Не подключайте базу данных. Просто подключите и сохраните строку подключения в конфигурации