На моем компьютере он работает правильно, но когда я создаю установочный файл и устанавливаю его на другом компьютере, программное обеспечение не работает.
Основная причина этого заключается в том, что этот путь не существует на другой машине; вы жестко запрограммировали свой путь.
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\aa\Test.accdb;Jet OLEDB:Database Password=123;");
C:\Users\aa\Test.accdb
это актуальная проблема, вам не нужно жестко кодировать это значение, вместо этого у вас есть два варианта, которые я могу придумать.
- Найдите файл рядом с приложением, из которого он выполняется (для этого требуется, чтобы файл находился в том же каталоге, в котором находится exe-файл).
- Вы можете разрешить конечному пользователю войти расположение этого файла, если оно существует, сохраните этот путь, чтобы использовать его снова, когда это необходимо.
Вы можете использовать любой из них или, как я упоминал выше, или делать оба из них, по вашему выбору. Ниже приведен простой пример использования первого варианта выше.
using System.Reflection;
using System.IO;
public static string GetDBConnection()
{
try
{
string dbExecPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Test.accdb");
return $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={ dbExecPath };Jet OLEDB:Database Password=123;";
}
catch (Exception)
{
return string.Empty;
}
}
Это получает расположение сборок (путь) и объединяет его с именем вашего файла (файл БД). Затем объедините это с вашими другими частями строки соединения и верните всю строку соединения.
Обратите внимание: пространства имен, которые должны использоваться, и файл БД должен находиться в том же каталоге, что и exe, если вы идете по этому маршруту.
Теперь вы можете назвать его так:
OleDbConnection con = new OleDbConnection(GetDBConnection());
Возможно, вы захотите присвоить GetDBConnection()
переменной и проверить, если она пуста, прежде чем создавать свой соединение может быть пустым.