Я подключил c# windows приложение к базе данных Access (accdb), но приложение не работает на других компьютерах - PullRequest
0 голосов
/ 05 марта 2020

Я подключил базу данных Access (accdb) к проекту приложения C# - windows. База данных "accdb" находится в папке на рабочем столе. На моем компьютере он работает правильно, но когда я собираю установочный файл и устанавливаю его на другом компьютере, программное обеспечение не работает. (Я знаю, проблема в том, что база данных находится в папке), но я не знаю, как изменить код, который после установки на другом компьютере, он все еще может подключиться к базе данных. Кто-нибудь знает, как мне решить эту проблему? Вот простая связь, которую я написал:

OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\aa\Test.accdb;Jet OLEDB:Database Password=123;");

1 Ответ

1 голос
/ 05 марта 2020

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

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

 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 это актуальная проблема, вам не нужно жестко кодировать это значение, вместо этого у вас есть два варианта, которые я могу придумать.

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

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

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() переменной и проверить, если она пуста, прежде чем создавать свой соединение может быть пустым.

...